Microsoft Exchange不会将PHPmailer生成的电子邮件呈现为HTML

时间:2014-05-05 01:35:07

标签: php html email exchange-server phpmailer

这个问题已经困扰了我好几个星期。我有一个脚本,在PHPmailer的帮助下,将带有xls attachmentm的html电子邮件发送给多个收件人。它已经工作了一年多了。最近,使用Microsoft Exchange作为其电子邮件客户端的同一公司的两位收件人以文本形式接收此电子邮件。以下是他们收到的示例电子邮件:

--b1_dbc2cccc876da210fd56ae7a2601e692
Content-Type: multipart/alternative;
        boundary="b2_dbc2cccc876da210fd56ae7a2601e692"

--b2_dbc2cccc876da210fd56ae7a2601e692
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

To view the message, please use an HTML compatible email viewer!


--b2_dbc2cccc876da210fd56ae7a2601e692
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

....................................
the email body html code in this block
....................................


--b2_dbc2cccc876da210fd56ae7a2601e692--

--b1_dbc2cccc876da210fd56ae7a2601e692
Content-Type: application/octet-stream; name="3MShop-NewOrders_07-30AM-05052014.xls"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="3MShop-NewOrders_07-30AM-05052014.xls"

PGgyPjNNU2hvcC1OZXdPcmRlcnMgMDUtMDUtMjAxNCAwNzozMDoxMCBBTSA8L2gyPjxociAvPjx0
YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz01IGNlbGxzcGFjaW5nPTI+PHRyPjx0ZCBhbGln

MDUgLSBOYXZ5IEJsdWU8L3RkPjx0ZCBhbGlnbj1sZWZ0PjE8L3RkPjwvdHI+PC90YWJsZT4=

....................................
the rest codes of this attachment
....................................

--b1_dbc2cccc876da210fd56ae7a2601e692--

以下是来自其他收件人的示例电子邮件标题

Content-Type: multipart/mixed;
    boundary="b1_dbc2cccc876da210fd56ae7a2601e692"
Sender:  <emocean@cp60.ezyreg.com>
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - cp60.ezyreg.com
X-AntiAbuse: Original Domain - emoceanstudios.com.au
X-AntiAbuse: Originator/Caller UID/GID - [616 500] / [47 12]
X-AntiAbuse: Sender Address Domain - emoceanstudios.com.au
X-Get-Message-Sender-Via: cp60.ezyreg.com: authenticated_id: emocean/from_h
X-Source: 
X-Source-Args: /usr/sbin/proxyexec -q -d -s /var/run/proxyexec/cagefs.sock/socket /bin/cagefs.server 
X-Source-Dir: emoceanstudios.com.au:/public_html/3M-Shop-Scripts

--b1_dbc2cccc876da210fd56ae7a2601e692
Content-Type: multipart/alternative;
    boundary="b2_dbc2cccc876da210fd56ae7a2601e692"

--b2_dbc2cccc876da210fd56ae7a2601e692
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

To view the message, please use an HTML compatible email viewer!


--b2_dbc2cccc876da210fd56ae7a2601e692
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

你可以很容易地看出差异是有问题的,没有

的部分
Content-Type: multipart/mixed;

更奇怪的是,虽然他们的Microsoft Exchange无法将这封从PHPmailer发送的电子邮件呈现为HTML,但如果我将同一封电子邮件从我的Gmail转发到他们的Exchange,他们现在可以正确呈现它。这让我觉得它可能是我的PHP脚本问题。脚本在这里:

$mail = new PHPMailer(true);
$mail->CharSet = 'UTF-8';


$mail->AddAddress('example@example.com.au', 'example name');
$mail->SetFrom('example@example.com.au', 'example name');

$mail->ContentType = 'text/html';
$mail->IsHTML(true);  

$mail->Subject = 'example subject';
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 

$mail->MsgHTML(file_get_contents('contents.html'));
$mail->AddAttachment($newOrdersReport);      // attachment

$mail->Send();

2 个答案:

答案 0 :(得分:2)

我不是电子邮件专家,但这对我来说不合适:

--b1_dbc2cccc876da210fd56ae7a2601e692
Content-Type: multipart/alternative;
boundary="b2_dbc2cccc876da210fd56ae7a2601e692"

你已经将Content-Type声明为multipart并定义了边界,为什么重复?

答案 1 :(得分:1)

请在收到电子邮件时附上电子邮件的源代码。据我所知,有一些旧版本的Exchange,即2007年没有SP1的人会以纯文本形式全面显示HTML电子邮件。我知道OWA对HTML电子邮件的支持极差。 OWA是唯一一个我从来没有能够让我的电子邮件看起来很好的客户。远不是你的问题的答案,而是一些引发研究的事情......

另一个想法......你应该查看并比较通过PHPmailer与Gmail发送时附加到电子邮件的安全性。 SPK和DKIM身份验证以及SpamAssassin评分可能会在客户端显示电子邮件方面发挥重要作用。如果您没有通过PHPmailer验证消息,则很可能触发Exchange限制其显示方式。