我正在使用HTML电子邮件发送客户的简报。不使用HTML邮件不是一个选项。我已经使用PHPMailer进行邮件发送,但我也尝试过直接使用PHP的mail()函数。在这两种情况下,我都会遇到下面描述的相同问题。我尝试过发送多部分以及只发送HTML版本。
在我尝试的每个电子邮件客户端中,电子邮件都很好。我的意思是电子邮件被识别为HTML电子邮件并且内容被呈现。除 Outlook Express 上的某些帐户外。我无法辨别为什么它适用于某些人以及为什么它不适用于其他人(所有使用Outlook Express)。我已经将HTML电子邮件转发到此帐户(来自gmail以及outlook express),它们显示得很好。所以Outlook Express版本绝对能够显示HTML电子邮件。
现在,在这些失败的情况下,Outlook Express忽略了邮件头的重要部分。我实际上可以看到这一点:当我查看电子邮件的原始来源时,它会以粗体显示部分 - 标题 - 而不是粗体部分 - 正文。
以下是电子邮件。我已经修改了一些“个人”部分。
此部分以粗体显示,由Outlook Express识别为标题:
DomainKey-Status: no signature
Received: (qmail xxxx invoked by uid xxx); 22 Dec 2008 21:04:33 +0100
To: xxxxxxxxxxxxxxxxxx
Subject: Test
Date: Mon, 22 Dec 2008 21:04:33 +0100
此部分不是粗体,显示在Outlook Express的邮件内容面板中。
From: Root User <xxxxxxxxxxxxxxxxxxxxxx>
Message-ID: <xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Priority: 3
X-Mailer: PHPMailer (phpmailer.sourceforge.net) [version 2.0.3]
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="b1_cb79043f473b53e87bfa759755fce3ce"
--b1_cb79043f473b53e87bfa759755fce3ce
Content-Type: text/plain; charset = "iso-8859-1"
Content-Transfer-Encoding: 8bit
test
--b1_cb79043f473b53e87bfa759755fce3ce
Content-Type: text/html; charset = "iso-8859-1"
Content-Transfer-Encoding: 8bit
<p>Test</p>
--b1_cb79043f473b53e87bfa759755fce3ce--
答案 0 :(得分:1)
好的,我想我解决了这个问题。标题中的各行由\ r \ n分隔,显然Outlook期望它们仅由\ n分隔。甚至PHPMailer似乎都这样做,所以我现在正在使用PHP的mail()函数。
答案 1 :(得分:0)
在第二个MIME块中的HTML之前添加换行符将解决您的问题。如果需要,您还可以在该块上设置“Content-Disposition:inline”。在我的测试中,我仍然必须在Outlook Express中按Alt + Shift + H,因为出于安全原因它默认为纯文本。
以下是最终正在运行的EML:
DomainKey-Status: no signature
Received: (qmail xxxx invoked by uid xxx); 22 Dec 2008 21:04:33 +0100
To: xxxxxxxxxxxxxxxxxx
Subject: Test
Date: Mon, 22 Dec 2008 21:04:33 +0100
From: Root User <xxxxxxxxxxxxxxxxxxxxxx>
Message-ID: <xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Priority: 3
X-Mailer: PHPMailer (phpmailer.sourceforge.net) [version 2.0.3]
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="b1_cb79043f473b53e87bfa759755fce3ce"
--b1_cb79043f473b53e87bfa759755fce3ce
Content-Type: text/plain; charset = "iso-8859-1"
Content-Transfer-Encoding: 8bit
test
--b1_cb79043f473b53e87bfa759755fce3ce
Content-Type: text/html; charset = "iso-8859-1"
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<p>Test</p>
--b1_cb79043f473b53e87bfa759755fce3ce--
答案 2 :(得分:0)
尝试更改边界的创建:
/* Set the boundaries */
$uniq_id = md5(uniqid(time()));
$this->boundary[1] = '------------01' . $uniq_id; // was started by b1_
$this->boundary[2] = '------------02' . $uniq_id; // was started by b2_
Tomor.cz
编辑: 这不是解决方案:: /
但我发现,如果我通过smtp服务器使用phpmailer就可以了,当我通过mail()函数发送电子邮件时,它在outlook中出现了问题..
答案 3 :(得分:0)
我发现如果这个问题出现在我使用PHPMailer v 2.3的时候。当我升级到PHPMailer_v5.0.2时,在Outlook中正确显示了邮件。