为什么Outlook 2010会破坏我的HTML电子邮件正文?
问题描述:
每当我从我自己的服务器(使用我自己的电子邮件代码)向Outlook 2010发送HTML电子邮件时,它会删除每个HTML属性的前2个字符。为什么Outlook 2010会破坏我的HTML电子邮件正文?
下面是来自HTML体片段(见表属性搞砸了):
<table cellpadding=" cellspacing=" border=" class=ostdata">
<thead>
<tr>
<th>Field</th>
<th>Value</th>
</tr>
</thead>
<tr>
<th>Test</th>
<td>Hello world!</td>
</tr>
</table>
完整的HTML体从Outlook 2010:
<style> BODY {font-family:Arial,Helvetica,Tahoma,sans-serif;font-size:12px;font-weight:normal;color:#4F4F4F;margin:8px;padding:0} H1 {font-size:14px;font-weight:bold;margin-top:18px} .postdata {margin:10px;padding:10px 0} .postdata TABLE {font-family:Arial,Helvetica,Tahoma,sans-serif;font-size:12px;font-weight:normal;color:#4F4F4F} .postdata TH {font-weight:bold;color:#FFF;text-align:left;padding:4px 8px;background-color:#555} .postdata TD {padding:4px 8px} .postdata THEAD TH {font-size:0.85em;font-weight:normal;text-transform:uppercase;background-color:#444} .signature {color:#9F9F9F;margin:40px 0 10px 0}</style>Test email with single <table style=olor: red" width=00%"><tr><td>Table data</td></tr></table><table cellpadding=" cellspacing=" border=" class=ostdata"> <thead> <tr> <th>Field</th> <th>Value</th> </tr> </thead><tr> <th>Test</th> <td>Hello world!</td></tr></table>
从Outlook 2010头(我无法在Outlook 2010中查看整个源代码):
Return-Path: <REMOVED>
Delivered-To: REMOVED
Received: (qmail 31757 invoked by alias); 22 Oct 2014 02:50:45 -0000
Delivered-To: alias-localdelivery-REMOVED
Received: (qmail 31751 invoked by uid 102); 22 Oct 2014 02:50:45 -0000
Date: 22 Oct 2014 02:50:45 -0000
Message-ID: <20141022025045.31750.REMOVED>
To: REMOVED
Subject:
From: REMOVED
X-Mailer: MailBot version 1.24
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="MailBot=="
打开完整的HTML电子邮件wi Mac Mail 7.3:
Return-Path: <REMOVED>
Delivered-To: REMOVED
Received: (qmail 32582 invoked by alias); 22 Oct 2014 02:57:39 -0000
Delivered-To: alias-localdelivery-REMOVED
Received: (qmail 32579 invoked by uid 102); 22 Oct 2014 02:57:39 -0000
Date: 22 Oct 2014 02:57:39 -0000
Message-ID: <20141022025739.32578.REMOVED>
To: REMOVED
Subject:
From: REMOVED
X-Mailer: MailBot version 1.24
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="MailBot=="
This is a multipart message in MIME format.
--MailBot==
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
Test email with single
--MailBot==
Content-Type: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<style> BODY {font-family:Arial,Helvetica,Tahoma,sans-serif;font-size:12px;font-weight:normal;color:#4F4F4F;margin:8px;padding:0} H1 {font-size:14px;font-weight:bold;margin-top:18px} .postdata {margin:10px;padding:10px 0} .postdata TABLE {font-family:Arial,Helvetica,Tahoma,sans-serif;font-size:12px;font-weight:normal;color:#4F4F4F} .postdata TH {font-weight:bold;color:#FFF;text-align:left;padding:4px 8px;background-color:#555} .postdata TD {padding:4px 8px} .postdata THEAD TH {font-size:0.85em;font-weight:normal;text-transform:uppercase;background-color:#444} .signature {color:#9F9F9F;margin:40px 0 10px 0}</style>Test email with single <table style="color: red" width="100%"><tr><td>Table data</td></tr></table><table cellpadding="0" cellspacing="1" border="0" class="postdata"> <thead> <tr> <th>Field</th> <th>Value</th> </tr> </thead><tr> <th>Test</th> <td>Hello world!</td></tr></table>
--MailBot==--
为什么Outlook会这样做?
答
症状与声明Content-Transfer-Encoding: quoted-printable
一致,但实际上并未使用此编码,并且您发布的标头似乎证实了这一点。
在QP中,您将有attribute=3D"value"
,因为等号是此编码中的元字符,需要编码为=3D
。这是可以理解的(虽然可以说并不完全正确),一个等号后跟两个非十六进制(和非新行)字符的序列被Outlook丢弃为非法。无论如何,我会责怪你的发送代码 - 你没有显示 - 而不是Outlook(尽管我个人认为Outlook应该因为其他原因被禁止)。
在阅读你的答案之前,我确实想出了这个解决方案,但你完全正确。我改变了我的编码为'7bit',它工作。 – Jared 2014-10-22 03:40:25
这是一个完美的解决方案,只要您可以保证您的数据不包含任何超长的行(限制在约1000字节的IIRC),或者显然,任何8位数据。如果这些限制并不完全适用,实际上实施QP实际上可能是最容易,最不干扰的修复,因为它可以免除您对实际内容的任何限制。 – tripleee 2014-10-22 04:28:49