2014-10-22 2 views
0

Всякий раз, когда я отправляю HTML-письмо с моего собственного сервера (с моим собственным кодом электронной почты) в Outlook 2010, он удаляет первые 2 символа каждого атрибута HTML.Почему 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 (I не могут просмотреть весь источник в 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 th 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 делает это?

ответ

2

Симптомы согласуются с объявлением Content-Transfer-Encoding: quoted-printable, но на самом деле не используют эту кодировку, и заголовки, которые вы опубликовали, как бы не вызывают этого.

В QP у вас будет attribute=3D"value", потому что знак равенства является метасимволом в этой кодировке и должен быть закодирован как =3D. Понятно (хотя, возможно, и не совсем правильно), что последовательность знака равенства, за которым следуют два символа без шестнадцатеричной (и не-новой строки), отбрасывается Outlook как незаконная.

В любом случае, я бы обвинил ваш код отправки, который вы не показываете, - а не Outlook (хотя лично я считаю, что Outlook должен быть запрещен по другим причинам).

+0

Я действительно придумал это решение, прежде чем читать ответ, но вы совершенно правы. Я изменил свою кодировку на '7bit', и она сработала. – Jared

+0

Это идеальное решение, поскольку вы можете гарантировать, что ваши данные не содержат никаких перекрывающихся линий (предел составляет около 1000 байт IIRC) или, очевидно, любые 8-битные данные. Если эти ограничения не совсем удобны, на самом деле реализация QP может быть самым простым, наименее навязчивым исправлением, поскольку оно избавляет вас от любых ограничений на фактическое содержимое. – tripleee

Смежные вопросы