C# 如何防止HTML电子邮件在使用System.Net.Mail.MaiMessage使用C发送时引用可打印内容

C# 如何防止HTML电子邮件在使用System.Net.Mail.MaiMessage使用C发送时引用可打印内容,c#,.net,css,email,mailmessage,C#,.net,Css,Email,Mailmessage,我正在尝试使用C VS2012.NET 4.5 System.NET.Mail.MailMessage向gmail地址发送电子邮件 已发送电子邮件,但始终具有: Content-Transfer-Encoding: quoted-printable 当我在邮件客户端gmail web邮件客户端中查看电子邮件的来源时 我已经尝试了我所能想到的各种不同的组合,包括BodyEncoding、BodyTransferEnconding和DeliveryFormat等。。。但是没有什么能摆脱这个引用的可

我正在尝试使用C VS2012.NET 4.5 System.NET.Mail.MailMessage向gmail地址发送电子邮件

已发送电子邮件,但始终具有:

Content-Transfer-Encoding: quoted-printable
当我在邮件客户端gmail web邮件客户端中查看电子邮件的来源时

我已经尝试了我所能想到的各种不同的组合,包括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">
    ...
我发送的HTML是从序列化到web.config的字符串加载的,如下所示:

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;
}
<!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>
它添加了这个,但当我在gmail中查看邮件来源时,上面仍然有引用的可打印内容

问候,


Scott

据我所知,css无法正常工作。 我认为您必须转换html,以便将样式从样式标记中取出,并内联放置到html标记中。
有很多工具可以做到这一点,如果您想在C中动态地实现这一点,请看以下内容:

感谢您的响应。这使它工作起来,即使在3D的插入后,永远=符号。让我吃惊的是,我在看一封Telerik HTML电子邮件,查看源代码,他们在标题中的一个样式元素中有样式,他们的内容传输编码是7BIT,他们没有到处插入臭名昭著的3D。但是当我更仔细地观察时,我发现他们实际上没有使用标题中的样式,而且他们确实有内联样式。再次感谢你-这没有什么区别,因为引用的可打印编码也会破坏内联样式。问题是,如何防止QP编码,但切换到内联样式对QP编码没有影响。如果有办法防止这种情况发生,我真的很想知道,因为我的整个Gmail收件箱都是QP编码的,就在几天前,不知道为什么!
_MailMessage.Headers.Add("Content-Transfer-Encoding", "7BIT");