【问题标题】:Read Gmail XOAUTH mails without marking it read阅读 Gmail XOAUTH 邮件而不将其标记为已读
【发布时间】:2013-05-13 07:03:19
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    基于documentation,您需要使用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])
    

    【讨论】:

    • 谢谢。这有帮助。除此之外, imap.fetch(message_id, "FLAGS")[0].attr["FLAGS"] 让我知道当前的已读/未读状态。
    【解决方案2】:

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

    imap.examine('INBOX')
    

    代替:

    imap.select('INBOX')
    

    来自Net::IMAP doc

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

    【讨论】:

    • 这是最好的答案
    猜你喜欢
    • 2011-12-02
    • 2015-01-15
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2016-07-30
    • 2013-06-15
    相关资源
    最近更新 更多