需要用 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 解析没有部分的电子邮件正文
如何通过Perl脚本随时随地得知项目进展状态--Perl 发送邮件