在Ruby Net :: IMAP中选择邮箱“已发送邮件”或“所有邮件”

我正在尝试使用Ruby中的Net :: IMAP来搜索我发送的所有邮件,但是我在选择除了INBOX之外的任何东西时遇到了麻烦。

imap.select('INBOX') 

工作正常,但是

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

如在Net :: IMAP文档中显示给我“未知邮箱”。

顺便说一下,这将与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 

“已发送邮件”文件夹因提供商而异。 Gmail的“已发送邮件”文件夹名为“ [Gmail]/Sent Mail ”。 选择它,它会工作。

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

仅供参考,Gmail的系统文件夹如下:

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

您可以使用以下命令查找所有文件夹的名称:

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

Gmail文件夹名称将根据用户选择的语言而更改。 所以以西class牙语为例:

“[Gmail] /全部”邮件将是“[Gmail] / Todos”

我发现以下内容很有帮助(ruby 2.0.0-p195)

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

不要使用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 请点击我