2013-05-13 95 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