【问题标题】:Receive an email with Actionmailer and read the plain body text使用 Actionmailer 接收电子邮件并阅读纯正文
【发布时间】:2011-05-09 22:58:23
【问题描述】:

我正在使用 IMAP 接收来自 gmail 的一些电子邮件,然后使用新的 Rails 3 ActionMailer 接收方法解析它们。

raw_email   = imap.uid_fetch(uid, ['RFC822']).first.attr['RFC822']
email = UserMailer.receive(raw_email)

email 现在是 Mail::Message 类,并且 to:、:from 和 :subject 可以正常工作。但是我不知道如何从正文中获取纯文本。在 Rails 3 之前,我可以使用 tmail_body_extractors 插件来获得简单的主体。

您将如何使用 Rails 3 来做到这一点?

雅各宾斯基: email.body.raw_source 更接近一点仍然给我很多垃圾。

"--001636310325efcc88049508323d\r\n内容类型:文本/纯文本; charset=ISO-8859-1\r\n内容传输编码: 引用-可打印\r\n\r\n这是一些正文 内容\r\n\r\n--=20\r\nVenlig Hilsen\r\nAsbj=F8rn 莫雷尔\r\n\r\n--001636310325efcc88049508323d\r\n内容类型: 文本/html; charset=ISO-8859-1\r\n内容传输编码: 带引号的可打印\r\n\r\naf 邮件
--
Venlig 希尔森
Asbj=F8rn 莫雷尔
\r\n\r\n--001636310325efcc88049508323d--"

我应该使用自己的助手来清理 raw_source 还是已经有方法、gem 或助手?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    查看这个问题的答案: Rails - Mail, getting the body as Plain Text

    简而言之,解决方案是:

    plain_part = message.multipart? ? (message.text_part ? message.text_part.body.decoded : nil) : message.body.decoded

    但我建议阅读完整的答案,因为它非常好且全面。

    【讨论】:

      【解决方案2】:

      你可以从 body.parts 中提取普通的 body。然而,正文中仍然存在一些标题:

      if body.multipart?
        body.parts.each do |p|
          if p.mime_type == "text/plain"
            body = p.body
          end
        end
      end
      body.to_s
      

      【讨论】:

        【解决方案3】:

        您应该能够像email.body.raw_source 一样简单地检索正文。 我自己没有测试过,你可以看看ActionMailer:: Message#body的源码。

        【讨论】:

        • 据我所知,没有 gem 可以获取/清理电子邮件正文。但是,您应该能够使用一些正则表达式来清理此输出。
        • 我对这个答案投了反对票,因为它没有给出正确的答案并且实际上令人困惑。 email.body.raw_source 返回带有 MIME 类型标头的正文,无需任何特殊“清理”即可避免。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        相关资源
        最近更新 更多