有没有人知道为什么Outlook会显示使用php的mail()函数发送的纯文本电子邮件的邮件正文中的部分标题?另一方面,Thunderbird正确显示了电子邮件。
这些是来自电子邮件来源的标题:
Return-Path: <user@mydomain.com>
X-Original-To: webmaster@mydomain.com
Delivered-To: webmaster@mydomain.com
Received: by mydomain.com (Postfix, from userid 10001)
id C7C0C4563746; Sat, 22 Mar 2014 03:11:19 +0200 (EET)
To: =?UTF-8?B?U2VuZGVy?= <webmaster@mydomain.com>
Subject: =?UTF-8?B?VGhpcyBpcyB0aGUgdGl0bGU=?=
X-PHP-Originating-Script: 10001:sendmail.php
From: =?UTF-8?B?U2VuZGVy?= <webmaster@mydomain.com>
MIME-Version: 1.0
Content-type: text/plain; charset=UTF-8
Message-Id: <20140322011119.C7C0C4563746@mydomain.com>
Date: Sat, 22 Mar 2014 03:11:19 +0200 (EET)
...这些行显示在Outlook 2007中邮件正文的开头:
MIME-Version: 1.0
Content-type: text/plain; charset=UTF-8
Message-Id: <20140322011119.C7C0C4563746@mydomain.com>
Date: Sat, 22 Mar 2014 03:11:19 +0200 (EET)
代码中定义的唯一标头是:
$headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";
问题可以通过排除这些问题来解决,这是AFAIK反对使用php的mail()函数的推荐方式。或者是吗?我应该删除MIME,内容类型和字符集还是有更好的方法?
BTW,问题只出现在使用PHP 5.3.3的服务器上。与使用PHP版本5.3.27(WAMP)和5.4.3的其他测试服务器相比,此服务器似乎也以不同方式处理换行符(“\ r \ n”导致Outlook中出现两个换行符) - 这些服务器没有标题问题也是。通过用PHP_EOL替换“\ r \ n”来解决邮件正文中的换行问题 - 在$ headers上也尝试了它但没有成功。