【问题标题】:Convert text/plain content out of e-mail to normal text将电子邮件中的文本/纯文本内容转换为普通文本
【发布时间】:2011-08-19 13:11:02
【问题描述】:

当我尝试从我的 IMAP 帐户中阅读一些电子邮件时:

imap.search(['NOT','SEEN']).each do |message_id|
  mail = imap.fetch(message_id, "BODY[1]")
end

我得到了各种ASCII码??我的字符串中的代码,例如 =20 =93 =94 等。 已经尝试了很多东西来转换或解码,但没有成功。我怎样才能摆脱这些代码?

【问题讨论】:

    标签: ruby-on-rails email imap


    【解决方案1】:

    有许多不同的选项可用于对消息正文进行编码,例如quoted-printable、base-64 等。在 Ruby 中最简单的做法是将整个消息传递到邮件 gem,让它进行解析,然后输出纯文本内容。

    message = Mail.new(raw_source)
    puts message.body.decoded
    

    根据经验,您实际上可能会发现您需要执行以下操作:

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

    当我们将消息发送到 CloudMailin 中的应用程序时,我们使用与此类似的东西,以确保我们找到纯文本部分,因为它并不总是保证纯文本部分会在正文中而不是 mime 编码。

    【讨论】:

      【解决方案2】:

      我不得不使用类似下面的东西来解析电子邮件。

      text = message.multipart? ? (message.text_part ? message.text_part.body.decoded : message.html_part.body.decoded) : message.body.decoded
      

      我解析的其中一条消息根本不包含 text_part,因此在这种情况下将 nil 放在那里是行不通的。

      【讨论】:

        【解决方案3】:

        听起来你找到了Quoted-printable 身体。您应该查找正文的编码是什么,并相应地对其进行解析。似乎Net::IMAP::BodyTypeBasic 可以为您提供此信息,但恐怕我对红宝石的了解不足以让您进一步了解。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-01
          • 1970-01-01
          • 2011-09-28
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 2011-07-08
          • 1970-01-01
          相关资源
          最近更新 更多