我们公司有一个网站,上面有在线商店osCommerce. 系统使用 PHP 的 mail() 函数因各种原因发送电子邮件,例如密码更改、订单确认等。
我们偶尔会收到客户报告,他们收到的电子邮件要么是空白的(电子邮件是纯文本格式),要么是乱码(电子邮件是 HTML 格式)。在后一种情况下,它实际上只是以原始文本显示的 HTML,但客户当然无法阅读它。在这种情况下,第一个开始标签<
,有时还有其他几个字符,都消失了。
为了确定这种情况是否只发生在某些客户或电子邮件系统中,我将网站配置为将每封邮件抄送给我这边的服务帐户。那些抄送的邮件总是邮件完好无损地到达 Outlook 并正确显示。值得一提的是,这种情况似乎在 Hotmail 用户中更常见,但肯定不仅限于他们。
由于该网站位于共享(Debian)主机上,因此我几乎无法从那方面进行调试,但是如果我提出正确的请求,我感觉托管公司员工会帮助我,即使他们在这些事情上投入的资源有限。
还有什么建议可以告诉我,我还可以做些什么来尝试确定为什么某些客户无法正确接收这些电子邮件,而抄送副本却可以正常到达?
更新
由于我不再在那家公司工作,所以我没有机会测试任何新想法。如果您对这个问题有任何想法,请尽一切努力发布它们,以便其他可能遇到类似问题的人受益,但我无法接受有关此问题的任何答案。
答案1
Outlook 对格式错误非常宽容,并且非常善于引入这些错误。尝试将它们发送到可以以原始格式查看的存储中。服务器上的本地邮箱或 Maildir 存储将是理想的选择。
桌面客户端和 Web 邮件客户端均可检查 ContentHeaders。不要以为它是 Web 邮件就支持 HTML。由于 HTML 存在安全问题,一些 Web 邮件应用程序默认采用文本模式。
理想情况下,您应该生成一个包含文本和 HTML 格式的多部分 MIME。这是最灵活的选项。正确完成后,它应该可以在任何地方正常显示。
答案2
可能是他们的电子邮件客户端无法自动识别它是 HTML。您可以明确将ContentHeaders HTML
(我不记得确切的拼写)添加到生成的电子邮件的标题中。