2013-05-13 100 views
0

我正在尝试使用Gmail-xoauth Gem阅读GMail发送的电子邮件。我想阅读电子邮件并保留其未读状态。阅读Gmail XOAUTH邮件时未标记为已读

首先,我尝试阅读标题。作品。

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

基于documentation,您需要使用store方法。的文档中提到:

存储(集,ATTR,标志)

发送存储命令,以改变与邮箱中的消息相关联的数据,特别是它们的标志。 set参数是一个数字或数组或数组或Range对象。每个号码都是一个消息序号。 attr是要存储的数据项的名称:'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]) 
+0

谢谢。这有助于。除此之外,imap.fetch(message_id,“FLAGS”)[0] .attr [“FLAGS”]让我知道当前的读/未读状态。 – Alagu 2013-05-13 18:39:41

2

这也许是非常晚,但我会离开这里的其他任何人绊倒在此。如果,什么都原因,你要阅读的电子邮件,并留下了标志的摄入量,使用:的

imap.examine('INBOX') 

代替:

imap.select('INBOX') 

Net::IMAP doc

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

+0

这是最好的答案 – stuartchaney 2014-01-26 17:09:14