接收有关Actionmailer的电子邮件并阅读纯文本正文

时间:2010-11-14 21:50:38

标签: ruby-on-rails ruby

我正在使用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吗?还是已经有方法,宝石或助手?

3 个答案:

答案 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的源代码。