解析从Outlook发送的电子邮件到php

时间:2011-04-22 20:25:27

标签: php parsing outlook pipe

使用此tut:parse emails

我能够获得电子邮件管道,并且附件/正文解析完全正常....只要电子邮件不是从Outlook发送的。

它可以完美地从gmail和thunderbird执行,但是当从Outlook发送传入的电子邮件时,脚本会失败。我认为它与outlook如何格式化其消息有关(在教程网站的评论中有人提到Outlook不符合要求),但实际上问题在我头上。任何帮助将不胜感激,谢谢。

fyi:这是outlook的最新版本(win7)。

2 个答案:

答案 0 :(得分:1)

正如您所遇到的,Outlook是电子邮件世界的祸害。您会注意到,您正在使用的教程中提供的内容多次引用编码为text/plain的内容。从Outlook发送的电子邮件可能包含text/html内容,而不是明文的内容。

根据您对电子邮件内容的处理方式,您可以调整脚本以接受text/html编码内容,也可以在现有脚本下面插入重复的正文搜索,如下所示: / p>

//get the message body  
if(substr($decoded[0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Body'])){  

    $body = $decoded[0]['Body'];  

} elseif(substr($decoded[0]['Parts'][0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Parts'][0]['Body'])) {  

    $body = $decoded[0]['Parts'][0]['Body'];  

} elseif(substr($decoded[0]['Parts'][0]['Parts'][0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Parts'][0]['Parts'][0]['Body'])) {  

    $body = $decoded[0]['Parts'][0]['Parts'][0]['Body'];  

}  

当然不是很漂亮,但如果检测到它,则应检索来自Outlook的HTML内容。

如果您需要实际解析HTML内容,您的问题会更复杂一些。您的下一步是查看此问题的一些答案:Robust, Mature HTML Parser for PHP

祝你好运!

答案 1 :(得分:0)

好的...

所以我修好了。我在Cpanel中设置管道,因为它更容易。我将管道置于“帐户级别过滤”之下,除了展望外,其他任何工作都很棒。我本来希望让脚本打印数据用于调试,但是当电子邮件来自outlook时它甚至都没有执行。看着邮件日志......没什么了不起的。我的管理员突发奇想,建议我将管道移动到cpanel中的“转发器”部分。那么现在它完美无缺。必须是cpanel中的错误。为什么你对计算机的了解越多,他们的意识就越少。

我必须实施其他一些调整:

A)在Windows环境中编写/编辑脚本时,会添加隐藏的字符。为了解决这个问题,我上传了php文件,然后在cpanel filemanager(us-ascii)中打开它,然后保存它。这会删除字符。 (显然也可以在* nix中打开) B)我不得不chmod到755,否则它不会运行。脚本坐在我的\ www之外,所以不用担心。 C)我的shebang必须是:#!/ usr / bin / php -q。 q是必要的,以使其运行。

希望这有助于其他人。