如何清理关于特殊字符的字符串(电子邮件正文)?

时间:2013-07-26 13:56:42

标签: ruby-on-rails ruby email user-interface imap

我收到了从IMAP帐户中提取的电子邮件。我把它编码为:

body = imap.uid_fetch(uid, "BODY[TEXT]")[0].attr["BODY[TEXT]"].force_encoding('UTF-8')

所以现在它看起来像这样:

puts body.inspect => "\n--Apple-Mail-028364EC-0K8B-4FD7-87E8-97C28C324717\nContent-Type: text/plain; charset=\"utf-8\"\nContent-Transfer-Encoding: quoted-printable\n\nHej=20\n\nI m=C3=A5 meget undskylde men jeg vil ikke k=C3=B8be produktet alligevel hvord=\nan g=C3=B8r vi det...=20\n\nHans Nielsen.         =20\nR=C3=B8rgade 65=20\n1234 G=C3=B8rlev\n\n"

我想在我的Rails应用中显示该电子邮件,因此该应用的用户可以查看该电子邮件。但是我该如何清理身体?

我想删除此部分:

--Apple-Mail-028364EC-0K8B-4FD7-87E8-97C28C324717
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

清理这部分:

Hej=20

I m=C3=A5 meget undskylde men jeg vil ikke k=C3=B8be produktet alligevel hvord=
an g=C3=B8r vi det...=20

Hans Nielsen.         =20
R=C3=B8rgade 65=20
1234 G=C3=B8rlev

这意味着用原始字符替换奇怪的字符。 Fyi,这些是:

=C3=A5å

=C3=B8ø

=20是???

=是???

如何做到这一点(不使用gsub)?

2 个答案:

答案 0 :(得分:2)

您需要使用MIME解析器,它应该处理删除标题并删除引用的可打印编码。根据您的电子邮件的布局,正文[text]可能会比您想要的更多。您需要下载BODYSTRUCTURE并选择所需的部分,或者下载整个消息(BODY [])并使用MIME解析器。

答案 1 :(得分:0)

解码结果为:

Hej 

I må meget undskylde men jeg vil ikke købe produktet alligevel hvordan gør vi det... 

Hans Nielsen.          
Rørgade 65 
1234 Gørlev

似乎=...=20"\n"