Mail gem - 如何清理邮件正文字符串

14

我正在尝试使用 Ruby Mail Gem 读取邮件。但是mail.body.decoded返回的不仅仅是正文消息。如何清除这个消息并删除不需要的文本呢?

-20cf30433c9a437cc304939017ef\nContent-Type: text/plain; charset=ISO-8859-1\nContent-

message = $stdin.read
mail = Mail.read_from_string(message)
puts mail.body.decoded

--20cf30433c9a437cc304939017ef\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n 真实的正文 \\n\n--20cf30433c9a437cc304939017ef\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n<br clear=3D\"all\">--20cf30433c9a437cc304939017ef--

我该如何清理这封邮件,只提取真实的正文而不包含任何头信息?

我正在使用Ruby on Rails创建一个简单的工单系统,当ticket@mydomain.com接收到一封邮件时会创建一个工单。但是当邮件以HTML格式发送时,正文会被包含头部文本所包围。

4个回答

10

如果您有格式正确的电子邮件,您可以使用 Mail 帮助方法:

mail = Mail.new(email_string)
mail.text_part # finds the first text/plain part
mail.html_part # finds the first text/html part

如果您有单部分消息(仅文本)或从互联网接收电子邮件,则这种方法并不总是有效,因为您无法依赖于每个客户端的格式。相信我,我已经吃过苦头了。


9

看起来你收到了一封多部分的电子邮件,因此可以使用 mail.parts[0].body.decoded 进行操作。

这些信息也可能会对你有帮助:

  • mail.multipart?
  • mail.parts.length

github上的 gem 文档非常不错。


2
使用mail gem,您可以执行以下操作:
text = mail.multipart? ? mail.text_part.decoded : mail.body.decoded`

0

添加邮件 gem,然后使用电子邮件正文格式与 mail.parts[1].body.decoded。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接