我正在寻找好/工作/简单使用PHP代码将原始电子邮件解析为部分.
我已经编写了几个强力解决方案,但每次都会出现一个小的更改/标题/空格/一些东西,我的整个解析器都会失败并且项目会崩溃.
在我指出PEAR/PECL之前,我需要实际的代码.我的主机有一些棘手的配置或东西,我似乎永远不会得到.so的构建正确.如果我确实得到了.so,那么path/environment/php.ini中的一些区别并不总是让它可用(apache vs cron vs cli).
哦,最后一件事,我正在解析原始电子邮件文本,而不是POP3,而不是IMAP.它通过.qmail电子邮件重定向传输到php脚本.
我不期待SOF为我写这篇文章,我正在寻找一些关于"正确"做的提示/起点.这是我知道已经解决的那些"轮子"问题之一.
你最终希望最终得到什么?身体,主体,发件人,附件?您应该花一些时间与RFC2822一起了解邮件的格式,但这里是格式良好的电子邮件最简单的规则:
HEADERS\n \n BODY
也就是说,第一个空白行(双换行符)是HEADERS和BODY之间的分隔符.HEADER看起来像这样:
HSTRING:HTEXT
HSTRING始终从一行的开头开始,不包含任何空格或冒号.只要换行符后跟空格,HTEXT就可以包含各种文本,包括换行符.
"BODY"实际上只是第一个双线换行之后的任何数据.(如果您通过SMTP传输邮件,则有不同的规则,但通过管道进行处理,您不必担心这一点).
因此,在非常简单的,大约1982年的RFC822术语中,电子邮件看起来像这样:
HEADER: HEADER TEXT HEADER: MORE HEADER TEXT INCLUDING A LINE CONTINUATION HEADER: LAST HEADER THIS IS ANY ARBITRARY DATA (FOR THE MOST PART)
大多数现代电子邮件比这更复杂.标题可以编码为字符集或RFC2047 mime字,或者其他很多我现在没想到的东西.如果您希望它们有意义,那么这些天的机构真的很难推出自己的代码.几乎所有由MUA生成的电子邮件都将进行MIME编码.这可能是uuencoded文本,它可能是html,它可能是一个uuencoded excel电子表格.
我希望这有助于提供一个框架来理解一些非常基本的电子邮件桶.如果您提供更多有关您尝试处理数据的背景信息,我(或其他人)可能会提供更好的指导.
尝试使用Plancake PHP电子邮件解析器:https: //github.com/plancake/official-library-php-email-parser
我用它来做我的项目.它工作得很好,它只是一个类,它是开源的.