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

选择邮箱";“已发送邮件”;或;“所有邮件”;在Ruby Net::IMAP中,ruby,gmail,imap,Ruby,Gmail,Imap,我正在尝试使用Ruby中的Net::IMAP来搜索我发送的所有邮件,但除了收件箱之外,我在选择其他邮件时遇到了问题 imap.select('INBOX') 很好,但是 imap.select('Mail/sent-mail') 如Net::IMAP文档所示,它为我提供了“未知邮箱” 顺便说一句,这是用来与gmail 我还尝试在imap.search()中添加“in”、“anywhere”,但没有解析 当前代码: imap.select('INBOX') now = Time.now.loc

我正在尝试使用Ruby中的Net::IMAP来搜索我发送的所有邮件,但除了收件箱之外,我在选择其他邮件时遇到了问题

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]/sentmail
”。选择它,它就会工作

imap.select('[Gmail]/Sent Mail')
仅供参考,Gmail的系统文件夹如下:

  • 收件箱
  • [Gmail]/所有邮件
  • [Gmail]/Drafts
  • [Gmail]/Sent-Mail
  • [Gmail]/Spam
  • [Gmail]/Starred
  • [Gmail]/Trash

您可以找到包含以下内容的所有文件夹的名称:

imap.list('*', '*') 
Gmail文件夹名称将根据用户选择的语言而变化。因此,以西班牙语为例:


“[Gmail]/All”邮件将是“[Gmail]/Todos”

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

不要使用
LIST”“*
。你们很多人最终会有数千个邮箱。使用
列表“%
。如果您只对
子文件夹/子文件夹感兴趣
,则可以执行类似
imap.list''、'%/%'
imap.list''、'%/%/'

仅列出父文件夹,深度为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.

请注意,这些文件夹名称是本地化的。你可以使用XLIST命令来获取文件夹类型。很漂亮,到处都在找,谢谢!如何选择所有邮件,而不考虑语言?发出
XLIST”“*
命令并选择返回的带有
\AllMail
标记的邮件。此系统文件夹列表在Perl中也适用。谢谢。:-)漂亮,到处都在找这个,谢谢!那么,我如何选择所有邮件而不考虑语言?如何选择imap|U cli.list(''''.*')。选择{k | k[:attr]。包括?(:All)}。首先?
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.