在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 请点击我