需要用 perl 解析 utf8 邮件

Posted

技术标签:

【中文标题】需要用 perl 解析 utf8 邮件【英文标题】:Need to parse utf8 email with perl 【发布时间】:2015-06-03 17:18:12 【问题描述】:

我需要解析一封似乎使用 utf-8 编码的电子邮件,以提取主题和发件人以及正文部分。

header部分没问题,但是body看起来是这样的:

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVkb3JhIFVwZGF0ZSBOb3RpZmljYXRpb24KRkVET1JB
MTUtNDQ1NwoyMDE1LTAzLTIzIDAyOjM5OjI1Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpO
ICAgICAgICA6IGtlcm5lbApQcm9kdWN0ICAgICA6IEZlZG9yYSAyMQpWZXJzaW9uICAgICA6
MTkuMgpSZWxlYXNlICAgICA6IDIwMS5mYzIxClVSTCAgICAgICAgIDogaHR0cDovL3d3dy5r
ZWwub3JnLwpTdW1tYXJ5ICAgICA6IFRoZSBMaW51eCBrZXJuZWwKRGVzY3JpcHRpb24gOgpU
Z2VybmVsIG1ldGEgcGFja2FnZQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVXBkYXRlIElu
...

Alpine 显然可以正确解码,并告诉我:

[ The following text is in the "utf-8" character set. ]
[ Your display is set for the "ANSI_X3.4-1968" character set.  ]
[ Some characters may be displayed incorrectly. ]

我可以为此使用哪个 perl 模块?希望这足以提供帮助。

我看到了用于创建 MIME 编码消息的模块,但是如何解码和读取一个?对于这种特定类型的编码,我需要一个模块吗?

【问题讨论】:

您的电子邮件将有一行描述这是什么 MIME 类型。它说什么? 使用Mime::Tools,尤其是Mime::Parser类。 上面写着:Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 【参考方案1】:

根据 cmets 中的 Content-type,这里发生了几种编码。正文已经过 Base-64 编码,允许电子邮件将任意数据表示为 ASCII。另一个是Base64编码下的数据是UTF-8编码。

Email::MIME 之类的东西应该能够处理这个问题,而不必担心细节。

【讨论】:

以上是关于需要用 perl 解析 utf8 邮件的主要内容,如果未能解决你的问题,请参考以下文章

Perl 使用 MIME::Parser 解析没有部分的电子邮件正文

解码 UTF8 电子邮件标头

用Perl发送邮件小例子

如何通过Perl脚本随时随地得知项目进展状态--Perl 发送邮件

使用 Email::MIME 和 multipart/signed 解析电子邮件

使用 Email::MIME 和 multipart/mixed with subparts 解析电子邮件