在PHP中处理电子邮件解析/解码的最佳方法?

时间:2011-01-18 07:17:29

标签: php email mime decode

目前我正在使用PEAR库的mimeDecode.php来解析传入的电子邮件。它似乎有很多问题,无法解码很多消息,所以我想用更好的东西替换它。

我正在寻找能够正确分离消息部分的内容,例如to,from,body等。理想情况下,它可以处理所有常见的编码方法,例如base64,uuencode,quoted printable,等

在同一封邮件的纯文本和html版本都包含在一封电子邮件中的情况下,我最好知道它们之间的区别,以便我可以选择我想要显示的部分。

我现在并不担心附件,但如果我想在将来实施这些附件,那么了解它们会很好。

我看到PHP有一组以imap开头的函数,看起来它们可能会按照我的意愿行事,但我不确定如何不试用它们。

目前我正在对PHP中的消息进行即时解码,这就是我正在寻找PHP替代解决方案的原因。

有没有人有这方面的经验可以指出我正确的方向?我不想开始使用从长远来看不会做我需要的东西。

6 个答案:

答案 0 :(得分:12)

我最近开发了一个PHP邮件解析器,我一直在生产中使用它 我对此感到非常满意,一些开发人员已将其分叉:

https://github.com/plancake/official-library-php-email-parser

答案 1 :(得分:7)

我知道这个问题现在已经有四年了......但我最终需要一个邮件解析库,并且不满意任何可用的选项。我想要一些可靠,符合PSR-2的东西,可以通过作曲家安装。

composer require zbateson/mail-mime-parser

它是它自己的解析器,从头开始构建以解决其他实现中的已知问题和错误。它经过了广泛的测试并得到了广泛的应用。

该库使用Psr7流,允许您将任何类型的流传递给它。它也不会将所有信息存储在内存中 - 如果需要,非常大的附件可以作为流而不是字符串返回,因此内存不会用完。同样,整个消息永远不会直接存储在内存中,只会引用流,而标头会保存在内存中。

https://github.com/zbateson/mail-mime-parser

查看website以获取指南和API ...如果您发现错误/拼写错误或看到改进,请随时打开一个问题,或直接挖掘并提供拉取请求: )

答案 2 :(得分:5)

有趣的是你应该问......我现在正在制作一个简单的通知系统。我刚刚使用Zend_Mail来完成弹跳管理器。它具有您正在寻找的所有功能......您可以连接到邮箱(POP3,IMAP,Mbox和Maildir)并从中提取消息以及对所有这些消息进行操作。

它处理多部分消息,但部分可能很难处理。我很难弄清楚哪个部分是我正在使用的NDR中附加的原始消息部分,但我有一种感觉我只是遗漏了文档中的内容。我不确定它如何处理编码,因为我的使用相当简单,但我很确定它有你提到的所有编码的规定。查看文档并浏览API。

答案 3 :(得分:4)

我分叉了php-mime-mail-parser来纠正所有问题:Fork of php-mime-mail-parser

超过52个测试和764个断言 代码覆盖率:100%行,100%函数和方法,100%类和特征

您需要PECL Package MailParse才能使用它,但包装器没有问题并经过全面测试。

答案 4 :(得分:2)

为了完整性,这是我要尝试的那个。 http://code.google.com/p/php-mime-mail-parser/ - 它是PHP MailParse的包装器,需要安装。

答案 5 :(得分:1)

我目前还在寻找易于使用,强大的MIME电子邮件解析库,目前正在认真研究eZ Components的Mail组件。但是,如果你正在寻找能让它像echo $email->text;echo $email->html;一样简单的东西,就像我一样,你会感到失望。实际上,由于MIME的工作方式,现在我不认为这种简化是可能的。但它确实似乎是PHP世界中最好的选择。

我开始使用Zend_Mail组件处理我当前的项目,但是当实际挖掘这些电子邮件部分和编码标题时,Zend_Mail几乎让你感到害怕。你需要自己进行大多数解码,这根本不好玩。

对于IMAP PHP扩展,它的意思是处理从邮箱中检索邮件,而不是MIME解码邮件。虽然,它确实有一些你可能需要的方便的解码功能。另一方面,Mailparse PECL扩展正好处理该问题集。我还没有尝试过,但似乎你需要编写大量代码来实际获取你想要的数据。