我最近一直在实现一些基于 PHP/IMAP 的电子邮件处理功能,并且除了消息正文解码(在某些情况下)之外,大多数东西都运行良好。
我认为,到目前为止,我已经记住了一半的RFC 2822(“Internet 消息格式”文档指南),通读了六个开源 CMS 的电子邮件处理代码,并阅读了大量论坛帖子、博客帖子、等处理在 PHP 中处理电子邮件。
我还分叉并完全重写了一个用于 PHP、Imap的类,并且该类可以很好地处理电子邮件——我有一些有用的方法来检测自动回复器(用于不在办公室、旧地址等),解码 base64 和 8bit消息等
但是,我根本无法可靠地工作的一件事(或者,有时,根本无法)是当消息以Content-Transfer-Encoding: 7bit
.
似乎不同的电子邮件客户端/服务解释7BIT
为不同的事物。我收到了一些据称7BIT
实际上是Base64 编码的电子邮件。我得到了一些实际上是引用可打印编码的。还有一些没有以任何方式编码。还有一些是 HTML,但未指示为 HTML,它们也被列为7BIT
...
以下是使用 7Bit 编码接收的消息正文的一些示例(片段):
1:
A random message=20
Sent from my iPhone
2:
PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwi
IHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9m
3:
tangerine apricot pepper.=0A=C2=A0=0ALet me know if you have any availabili=
ty over the next month or so. =0A=C2=A0=0AThank you,=0ANames Withheld=0A908=
-319-5916=0A=C2=A0=0A=C2=A0=0A=C2=A0=0A=0A=0A______________________________=
__=0AFrom: Names Witheld =0ATo: Names Withheld=
这些都是用“7Bit”编码发送的(嗯,至少根据 PHP/ imap_*
),但在我可以将它们作为纯文本传递之前,它们显然需要更多的解码。有什么方法可以可靠地将所有具有所谓 7Bit 编码的消息转换为纯文本?