這可能不完全是你的問題的答案,但我會告訴你我過去做了什麼。我嘗試使用ruby-gmail gem,但它沒有按照我希望它在閱讀郵件方面做的事情。或者,至少,我無法實現它的工作。相反,我使用內置的Net::IMAP
類來登錄並獲取消息。
require 'net/imap'
imap = Net::IMAP.new('imap.gmail.com',993,true)
imap.login('<username>','<password>')
imap.select('INBOX')
subject_id = search_mail(imap, 'SUBJECT', '<mail_subject>')
subject_message = imap.fetch(subject_id,'RFC822')[0].attr['RFC822']
mail = Mail.read_from_string subject_message
body_message = mail.html_part.body
從這裏您的消息存儲在body_message
並且是HTML。如果你想要整個電子郵件正文,你可能需要學習如何使用Nokogiri來解析它。如果你只是想要知道一些周圍字符的消息的一小部分,你可以使用正則表達式來找到你感興趣的部分。
我確實發現one page與ruby-gmail gem關聯,使用ruby-gmail閱讀Gmail郵件。我今天晚上進行了一次粗略的嘗試,但顯然谷歌加強了我帳戶的安全性,而且我沒法修改我的Gmail配置(根據我收到的警告郵件)而無法使用irb。所以我無法驗證該頁面上顯示的內容,但正如我所提到的,我過去的嘗試是不成熟的,而Net::IMAP
適合我。
編輯: 我發現this,這很酷。您需要添加
require 'cgi'
給你的班級。
我能夠以這種方式實現它。我有我的body_message
後,請從該鏈接頁面html2text
方法(我稍微修改及以下包括在內,因爲你必須body_message轉換爲字符串):
plain_text = html2text(body_message)
puts plain_text #Prints nicely formatted plain text to the terminal
這裏是稍微修改方法:
def html2text(html)
text = html.to_s.
gsub(/( |\n|\s)+/im, ' ').squeeze(' ').strip.
gsub(/<([^\s]+)[^>]*(src|href)=\s*(.?)([^>\s]*)\3[^>]*>\4<\/\1>/i,
'\4')
links = []
linkregex = /<[^>]*(src|href)=\s*(.?)([^>\s]*)\2[^>]*>\s*/i
while linkregex.match(text)
links << $~[3]
text.sub!(linkregex, "[#{links.size}]")
end
text = CGI.unescapeHTML(
text.
gsub(/<(script|style)[^>]*>.*<\/\1>/im, '').
gsub(/<!--.*-->/m, '').
gsub(/<hr(| [^>]*)>/i, "___\n").
gsub(/<li(| [^>]*)>/i, "\n* ").
gsub(/<blockquote(| [^>]*)>/i, '> ').
gsub(/<(br)(| [^>]*)>/i, "\n").
gsub(/<(\/h[\d]+|p)(| [^>]*)>/i, "\n\n").
gsub(/<[^>]*>/, '')
).lstrip.gsub(/\n[ ]+/, "\n") + "\n"
for i in (0...links.size).to_a
text = text + "\n [#{i+1}] <#{CGI.unescapeHTML(links[i])}>" unless
links[i].nil?
end
links = nil
text
end
您還在,你有天書,這一步你原來的問題提到:
email.message *returns mumbo-jumbo*
如果天書是HTML,您可能只需使用您的現有代碼與此html2text方法,而不是切換到Net::IMAP
,因爲我發佈我的原始答案時已討論過。
來源
2014-11-21 04:55:50
pjd
你能告訴我們什麼email.message回報? – pjd 2014-11-23 04:08:00
我實際上使用了:email.html_part.body.decoded,然後Nokogiri來解析HTML!簡單 – cannotcompute 2014-11-25 00:46:54