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

Eli*_*ert 17 ruby gmail imap

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

imap.select('INBOX')
Run Code Online (Sandbox Code Playgroud)

工作正常,但是

imap.select('Mail/sent-mail')
Run Code Online (Sandbox Code Playgroud)

如在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
Run Code Online (Sandbox Code Playgroud)

dka*_*arp 34

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

imap.select('[Gmail]/Sent Mail')
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,这些文件夹名称已本地化.您可以使用XLIST命令获取文件夹类型. (5认同)

小智 10

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

imap.list('*', '*') 
Run Code Online (Sandbox Code Playgroud)

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

"[Gmail] /全部"邮件将是"[Gmail]/Todos"