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 REAL BODY TEXT \\n\n--20cf30433c9a437cc304939017ef\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n<br clear=3D\"all\">--20cf30433c9a437cc304939017ef--

如何清理此电子邮件正文邮件消息,仅提取 REAL BODY TEXT 而没有任何标题?

我正在创建一个基于 Ruby on Rails 的简单票证系统,并在 ticket@mydomain.com 收到电子邮件时创建票证。但是当消息是 HTML 格式时,BODY TEXT 被 HEADERs 文本包围。

4

4 回答 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

如果您有例如单部分消息(仅文本)或从整个互联网接收电子邮件,这并不总是有效,因为您不能依赖每个客户的格式。相信我,我已经学会了艰难的道路。

于 2011-04-15T16:55:06.957 回答
9

看起来你有一个多部分电子邮件,所以你可以使用 mail.parts[0].body.decoded 这些可能也会派上用场:mail.multipart?
mail.parts.length

github上的 gem 文档相当不错

于 2010-10-29T21:08:27.113 回答
2

使用mailgem,您可以执行以下操作:

text = mail.multipart? ? mail.text_part.decoded : mail.body.decoded`
于 2016-06-22T05:48:38.277 回答
0

添加邮件 gem 并使用带有 mail.parts[1].body.decoded 的电子邮件正文格式。

于 2015-01-05T18:57:09.033 回答