阅读Gmail XOAUTH邮件而不标记为已读

时间:2013-05-13 07:03:19

标签: ruby-on-rails ruby gmail gmail-imap

我正在尝试使用gmail-xoauth Gem阅读来自GMail的电子邮件。我想阅读电子邮件并保留其未读状态。

首先,我试着只阅读标题。的工作原理。

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH2', email, access_token)
imap.select('INBOX')
imap.search(["SINCE", since]).each do |message_id|

    msg = imap.fetch(message_id,'RFC822.HEADER')[0].attr['RFC822.HEADER']
    mail = Mail.read_from_string msg
    puts mail.subject
end

现在,我想阅读电子邮件的正文/文本而不标记它。

2 个答案:

答案 0 :(得分:2)

根据documentation,您需要使用store方法。文件提到:

存储(set,attr,flags)

发送STORE命令以更改与邮箱中的邮件关联的数据,尤其是其标志。 set参数是数字或数字数组或Range对象。每个号码都是一个消息序列号。 attr是要存储的数据项的名称:'FLAGS'表示用提供的数据项替换消息的标志列表; '+ FLAGS'表示添加提供的标志;和'-FLAGS'意味着删除它们。 flags是一个标志列表。

返回值是Net :: IMAP :: FetchData的数组。例如:

p imap.store(6..8, "+FLAGS", [:Deleted])
#=> [#<Net::IMAP::FetchData seqno=6, attr={"FLAGS"=>[:Seen, :Deleted]}>, \\
#<Net::IMAP::FetchData seqno=7, attr={"FLAGS"=>[:Seen, :Deleted]}>, \\
#<Net::IMAP::FetchData seqno=8, attr={"FLAGS"=>[:Seen, :Deleted]}>]

所以你必须删除:Seen标志

imap.store(message_id, "-FLAGS", [:Seen])

答案 1 :(得分:2)

这可能已经很晚了,但是我会把它留给其他任何偶然发现的人。如果您出于任何理由想要阅读电子邮件并留下标记,请使用:

imap.examine('INBOX')

而不是:

imap.select('INBOX')

来自Net::IMAP doc

  

发送EXAMINE命令以选择邮箱,以便可以访问邮箱中的邮件。与select()的行为相同,只是所选邮箱被标识为只读。