2011-03-03 55 views
16

中選擇郵箱「發送郵件」或「所有郵件」我試圖在Ruby中使用Net :: IMAP來搜索由我發送的所有郵件,但我在選擇除了收件箱。在Ruby Net :: IMAP

imap.select('INBOX') 

工作正常,但如圖所示的Net :: IMAP文件上

imap.select('Mail/sent-mail') 

給我 「未知郵箱」。

順便提一句,這是與gmail一起使用的。

我也嘗試在我的imap.search()中添加「in」,「anywhere」,但沒有解析。

當前代碼:

imap.select('INBOX') 
now = Time.now.localtime - 1209600 #two weeks 
since = now.day.to_s() + "-" + Date::MONTHNAMES[now.month] + "-" + now.year.to_s() 
puts "since" 
puts since 
begin 
    mail_ids = imap.search(["FROM", "me", "SINCE", since]) 
    mail_ids.each do |id| 
    text = imap.fetch(id, 'BODY[HEADER.FIELDS (SUBJECT)]').to_s.split("{").second.chop 
    puts text 
    end 
end 

回答

32

「已發送郵件」 文件夾,將供應商的不同而不同供應商。 Gmail的「已發郵件」文件夾被命名爲「[Gmail]/Sent Mail」。選擇它,它會工作。

imap.select('[Gmail]/Sent Mail') 

僅供參考,Gmail的系統文件夾有以下幾種:

  • [Gmail]/All Mail
  • [Gmail]/Drafts
  • [Gmail]/Sent Mail
  • [Gmail]/Spam
  • [Gmail]/Starred
  • [Gmail]/Trash
+0

的感謝!它做到了。 – 2011-03-04 19:28:05

+5

請注意,這些文件夾名稱已本地化。您可以使用XLIST命令來獲取文件夾類型。 – 2011-03-10 03:31:10

+0

美麗,一直在尋找這個地方,謝謝你!那麼我怎樣才能選擇所有郵件而不管語言呢? – 2012-01-30 19:56:14

10

你可以找到所有文件夾的名稱:

imap.list('*', '*') 

Gmail的文件夾名的會根據用戶選擇的語言改變。因此,在西班牙語例如:

「[Gmail] /所有」 郵件會 「的[Gmail] /託多斯」

+0

美麗,一直在尋找這個地方,謝謝你!那麼我怎樣才能選擇所有郵件而不管語言呢? – 2012-01-30 19:57:06

+0

'imap_cli.list('','*')。select {| k | k [:attr] .include?(:All)} .first'? – ghayes 2015-04-23 07:15:15

2

我發現下面是有幫助的(紅寶石2.0.0-P195)

# list all folders 
imap.list '', '%' 
+0

這一個工作就像一個魅力.... – zee 2016-09-08 17:04:24

0

請勿使用LIST "" *。你很多結束了成千上萬的郵箱。這樣做就像@maček建議的那樣。 LIST "" %。如果你只對孩子興趣/子文件夾,那麼你可以這樣做imap.list '', '%/%'imap.list '', '%/%/%'

dump of the terminal: 

==>只列出了父母。深度1

C: RUBY0002 LIST "" "%" 
S: * LIST (\HasNoChildren) "/" Calendar 
S: * LIST (\HasNoChildren) "/" Contacts 
S: * LIST (\HasNoChildren) "/" "Deleted Items" 
S: * LIST (\HasNoChildren) "/" Drafts 
S: * LIST (\Marked \HasChildren) "/" INBOX 
S: * LIST (\HasNoChildren) "/" Journal 
S: * LIST (\HasNoChildren) "/" "Junk E-Mail" 
S: * LIST (\HasNoChildren) "/" Notes 
S: * LIST (\HasNoChildren) "/" Outbox 
S: * LIST (\HasNoChildren) "/" "Sent Items" 
S: * LIST (\HasNoChildren) "/" Tasks 
S: RUBY0002 OK LIST completed. 

列表兒童。深度2。

C: RUBY0003 LIST "" "%/%" 
S: * LIST (\HasNoChildren) "/" INBOX/subfolder 
S: RUBY0003 OK LIST completed. 
C: RUBY0004 SELECT INBOX/subfolder 
S: * 2 EXISTS 
S: * 0 RECENT 
S: * FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent) 
S: * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags 
S: * OK [UIDVALIDITY 37286] UIDVALIDITY value 
S: * OK [UIDNEXT 6] The next unique identifier value 
S: RUBY0004 OK [READ-WRITE] SELECT completed. 

閱讀這是很有幫助的HOWTO click-me please