2013-08-26 3 views
1

Я пытаюсь отправить электронное письмо на адрес gmail с помощью C# VS2012 .NET 4.5 System.Net.Mail.MailMessage.Как предотвратить распространение электронной почты HTML при отправке с помощью C# с помощью System.Net.Mail.MaiMessage

электронные прибудет прислал, но всегда есть:

Content-Transfer-Encoding: quoted-printable 

при просмотре источника сообщения электронной почты в почтовом клиенте (Gmail веб-почта клиент).

Я пробовал каждую комбинацию, которую я могу придумать с помощью BodyEncoding и BodyTransferEnconding и DeliveryFormat и т. Д. ... но ничто не может избавиться от этой цитируемой.

Проблема в том, что CSS не работает в письме. HTML-код рендеринга, но не применяется CSS, и когда я просматриваю источник электронной почты, я вижу, что он вставил этот 3D после всех значков =, и это мешает моему CSS работать.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir=3D"ltr" xml:lang=3D"en" xmlns=3D"http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv=3D"Content-Type" content=3D"Type=3Dtext/html; charset=3Dut=f-8" /> 
<style type=3D"text/css"> 
    ... 

код, я использую для отправки электронной почты выглядит следующим образом:

using (MailMessage _MailMessage = new MailMessage("[SENDER_EMAIL_REMOVED]", "[RECIPIENT_EMAIL_REMOVED]")) 
{ 
    SmtpClient _SmtpClient = new SmtpClient("smpt.gmail.com", 587); 
    _SmtpClient.EnableSsl = true; 
    _SmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
    _SmtpClient.UseDefaultCredentials = false; 
    _SmtpClient.Credentials = new System.Net.NetworkCredential("[USERNAME_REMOVED]","[PASSWORD_REMOVED]"); 
    _MailMessage.Subject = ""Test Email"; 
    _MailMessage.BodyEncoding = System.Text.Encoding.UTF8; 
    _MailMessage.BodyTransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; 
    _SmtpClient.DeliveryFormat = SmtpDeliveryFormat.SevenBit; 
    _MailMessage.Body = _MessageBody; 
} 

HTML, Я посылаю загружается из строки, которая была сериализации в web.config и заключается в следующем:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="Type=text/html; charset=utf-8" /> 
<title>Page Title</title> 
<style type="text/css"> 
.style1 {font-family: Arial, Helvetica, sans-serif; font-size: 12px; } 
.style2 {font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight:bold; } 
.tblRowHdrCol {font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight:bold; background-color:#f0f0f0; width:180px; } 
.tblRowValCol {font-family: Arial, Helvetica, sans-serif; font-size: 12px; padding-left:10px; width:100%; } 
</style> 
</head> 
<body> 
<p class="style1"><img src="http://www.domain.comn/image.jpg" alt="Some Image" /></p> 
<p class="style1"> 
Some text here... 

</p> 

    <table width="100%"> 
     <tr> 
      <td class="tblRowHdrCol">Field One:</td> 
      <td class="tblRowValCol">[FIELD_ONE]</td> 
     </tr> 
     <tr> 
      <td class="tblRowHdrCol">Field Two:</td> 
      <td class="tblRowValCol">[FIELD_TWO]</td> 
     </tr> 
     <tr> 
      <td class="tblRowHdrCol">Field Three:</td> 
      <td class="tblRowValCol">[FIELD_THREE]</td> 
     </tr> 
     <tr> 
      <td class="tblRowHdrCol">Field Four:</td> 
      <td class="tblRowValCol">[FIELD_FOUR]</td> 
     </tr> 
     <tr> 
      <td class="tblRowHdrCol" colspan="2">Exception Details:</td> 
     </tr> 
     <tr> 
      <td class="tblRowValCol" colspan="2" style="padding-left:1px">[EXCEPTION_DETAILS]</td> 
     </tr> 
    </table> 
</body> 
</html> 

Поэтому я загружаю это и нахожу и заменяю на держателях места [].

Как решить эту проблему?

Я даже попытался добавить заголовок, чтобы установить его в 7Bit:

_MailMessage.Headers.Add("Content-Transfer-Encoding", "7BIT"); 

Она добавила это, но все еще имела экранированные кавычки над ним, когда я смотрел на источник сообщения электронной почты в Gmail.

С уважением,

Скотт

ответ

0

Насколько я понимаю, вы не можете получить CSS-код для работы. Я думаю, вам нужно преобразовать html, чтобы стиль был снят с тега стиля и помещен в линию в теги html. Есть много инструментов, которые делают это, если вы хотите сделать это динамически на C#, посмотрите на это: Inlining CSS in C#

+0

Спасибо за ответчика. Это заставило его работать, даже с вставленным 3D после знака =. То, что меня бросило, это то, что я смотрел на электронную почту Telerik HTML, которую я получил, просматривая источник, и у них были стили в элементе стиля в заголовке, а их Content-Transfer-Encoding - 7BIT, и у них не было печально известный 3D. Но когда я посмотрел более внимательно, я обнаружил, что они фактически не используют стили в заголовке, и у них были встроенные стили. Еще раз спасибо ;-) – user2109254

+0

Это не имеет никакого значения, так как кодировка «quoted-printable» также прерывает встроенные стили. Вопрос в том, как * предотвратить * QP-кодирование, но переход на встроенные стили не влияет на QP-кодирование. Если есть способ предотвратить это, мне бы очень хотелось узнать, потому что весь мой почтовый ящик Gmail QP закодирован на несколько дней назад - не знаю, почему! https://en.wikipedia.org/wiki/Quoted-printable –

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