我正在使用IMAP从gmail接收一些电子邮件,然后使用新的Rails 3 ActionMailer接收方法解析它们。
raw_email = imap.uid_fetch(uid, ['RFC822']).first.attr['RFC822']
email = UserMailer.receive(raw_email)
电子邮件现在是一个Mail :: Message Class,并且:,from和:subject工作正常。但是我无法弄清楚如何从身体中获取纯文本。在Rails 3之前,我可以使用tmail_body_extractors插件来获取简单的正文。
你如何使用Rails 3做到这一点?
Jakobinsky: email.body.raw_source离我更近了还是给了我很多垃圾。
“ - 001636310325efcc88049508323d \ r \ nConContent-Type:text / plain; 字符集= ISO-8859-1 \ r \ nContent传送编码: 引用打印\ r \ n \ r \ n这是一些身体 content \ r \ n \ r \ n - = 20 \ r \ nVenlig Hilsen \ r \ nAsbj = F8rn 莫雷尔\ r \ n \ r \ n - 001636310325efcc88049508323d \ r \ nContent型: 为text / html;字符集= ISO-8859-1 \ r \ nContent传送编码: 引用打印\ r \ n \ r \ naf邮件
- - Venlig Hilsen
阿斯比约恩= F8rn 莫雷尔
\ r \ n \ r \ N - 001636310325efcc88049508323d - “
我应该使用自己的助手来清理raw_source吗?还是已经有方法,宝石或助手?
答案 0 :(得分:5)
请参阅此问题的答案: Rails - Mail, getting the body as Plain Text
简而言之,解决方案是:
plain_part = message.multipart? ? (message.text_part ? message.text_part.body.decoded : nil) : message.body.decoded
但我建议阅读完整的答案,因为它非常好而且全面。
答案 1 :(得分:1)
您可以从body.parts中提取普通的身体。但是身体仍然留有一些标题:
if body.multipart?
body.parts.each do |p|
if p.mime_type == "text/plain"
body = p.body
end
end
end
body.to_s
答案 2 :(得分:0)
你应该能够像email.body.raw_source
那样简单地检索身体。
我自己没有测试过,但你可以看一下ActionMailer:: Message#body的源代码。