Outlook Express无法识别*某些* HTML电子邮件

时间:2008-12-22 20:17:28

标签: html email outlook

我正在使用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--

4 个答案:

答案 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中正确显示了邮件。