也许我今天只是脑筋不好,但我突然无法弄清楚如何阅读带有ruby的net / imap库的电子邮件。我已经好几个小时了。我在google中输入了几个“ruby imap read body”的变种,并探索了很多网站。所有这些都有关于如何提取附件,同步电子邮件服务器,使用gmail等的示例......有些(如chilkat)实际上是共享软件库,可以为您执行此操作。我查看了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-rails所以这意味着没有动作邮件
答案 0 :(得分:25)
撇开@Bjer的答案,这是一个完整的解决方案,使用mail
gem和gmail_xoauth
gem使用OAuth2登录gmail并解析所有电子邮件:
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH2', 'example@gmail.com', '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
答案 1 :(得分:22)
如果您只想要消息的正文内容,可以使用:
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
答案 2 :(得分:7)
或者如果你使用ruby 1.9.x TMail似乎有问题 我正在使用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