2009-07-08 63 views
11

也許今天我腦子不好,但我突然無法弄清楚如何用ruby的net/imap庫閱讀電子郵件。我已經呆了好幾個小時了。我在google中輸入了幾個「ruby imap read body」的變體,並且探索了很多網站。他們都有如何拉附件,同步電子郵件服務器,與Gmail等工作的例子...一些(如chilkat)實際上是共享軟件庫,爲您做到這一點。我已經看過net/imap文檔,雖然有幾個例子可以完成除了閱讀正文的所有內容。如何使用ruby的net/imap庫讀取電子郵件的正文文本?

我已經使用net/imap之前,但我只需要將收件箱中的附件下拉到目錄。我問過#ruby和#rubyonrails無濟於事 - 沒有人能弄明白。

 

imap=Net::IMAP.new('mail.xks.com') #of course these are not real 
imap.login('web1_xk3','pxx2006') 
imap.select('INBOX') 
imap.search(["SENTSINCE",(Time.now-1.day).strftime("%d-%b-%Y")]).each do |msgid| 
    body = imap.fetch(msgid,"BODY")[0].attr["BODY"] 
    ##insert code for getting the text from the body here 
    ##body.class is BodyTypeText 
end 
 

P.S.雖然我做使代碼中的積極支持的參考,這是SANS護欄,使意味着沒有行動的郵件

回答

20

如果你只是想只是郵件的正文內容,您可以使用:

body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]'] 

雖然IMAP API有點深奧。如果你要處理整個消息,我會建議使用TMail解析成一個易於使用的格式:

msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
mail = TMail::Mail.parse(msg) 
body = mail.body 
7

或者,如果你對紅寶石1.9.x的TMail好像有問題
我「M使用Mail(https://github.com/mikel/mail

body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]'] 
msg = imap.fetch(-1,'RFC822')[0].attr['RFC822'] 
mail = Mail.read_from_string msg 

body = mail.body 
from = mail.from 
23

捎帶關@博伊爾的答案,這裏是一個使用mail寶石和寶石gmail_xoauth登錄到使用的OAuth2 Gmail的一個完整的解決方案,並分析所有的郵件:

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

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

    puts mail.subject 
    puts mail.text_part.body.to_s 
    puts mail.html_part.body.to_s 

end 
+0

`mail` gem是否對`xoauth`有任何依賴關係,因爲當我遵循你的代碼時,它會拋出錯誤'unknown auth type - 「XOAUTH2」`。我正在做`require'net/imap'`和`require mail`,然後你的代碼 – Jashwant 2012-10-24 11:05:13

相關問題