使用这个tut:parse emails
只要电子邮件不是从outlook发送的,我就能获得电子邮件管道和附件/正文解析完全working....as。
它可以很好地在gmail和thunderbird上执行,但是当传入的电子邮件是从outlook发送时,脚本就会失败。我认为这与outlook的消息格式有关(在教程网站的评论中,有人提到outlook不兼容),但老实说,这个问题超出了我的理解。任何帮助都会很感谢,谢谢。
仅供参考:这是outlook的最新版本(win7)。
发布于 2011-04-24 22:40:06
好的..。
所以我修好了它。我在Cpanel中设置管道,因为它更容易。我把管道放在“帐号级别过滤”下,除了outlook之外,它对任何东西都很有效。我很想让脚本打印调试数据,但当电子邮件来自outlook时,它甚至从未执行过。在邮件中看logs...nothing很明显。我的管理员一时兴起建议我将管道移动到cpanel中的"forwarders“部分。好了,现在它完美地工作了。一定是cpanel中的错误。为什么你对计算机了解得越多,它们的意义就越小。
只有几个我必须实现的其他调整:
A)在windows环境中编写/编辑脚本时,会添加隐藏字符。为了解决这个问题,我上传了php文件,在cpanel filemanager (us-ascii)中打开它,然后保存它。这将删除字符。(显然也可以在*nix中打开) B)我必须chmod到755,否则它不会运行。脚本放在我的\www之外,所以不用担心。C)我的示例必须是:#!/usr/bin/php -q。Q是运行它所必需的。
希望这对其他人有帮助。
发布于 2011-04-23 04:39:57
正如您所遇到的,Outlook是电子邮件世界的祸害。您会注意到,您正在使用的教程中提供的源代码多次引用编码为text/plain的内容。从Outlook发送的电子邮件可能包含text/html内容,而不是纯文本,或者除了纯文本之外。
根据您希望对电子邮件内容执行的操作,您也可以调整脚本以接受text/html编码的内容,方法是在现有的正文搜索下面插入重复的正文搜索,如下所示:
//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。
祝好运!
https://stackoverflow.com/questions/5759736
复制相似问题