0

我正在尝试使用 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

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

4

2 回答 2

2

根据您需要使用该方法的文档。store文档提到:

商店(设置,属性,标志)

发送 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])
于 2013-05-13T07:39:48.360 回答
2

这可能已经很晚了,但我会把它留在这里给其他偶然发现这个的人。如果出于某种原因您想阅读电子邮件并留下标志,请使用:

imap.examine('INBOX')

代替:

imap.select('INBOX')

来自网络::IMAP 文档

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

于 2013-08-01T14:56:15.337 回答