发送html电子邮件和plainText作为替代

时间:2016-12-08 13:23:36

标签: c# email system.net.mail

    using (MailMessage message = new MailMessage()) // using System.Net.Mail;
    {
      string mailFrom = "sender@email.si";
      string smtpServer = "smtp.server.net";

      message.From = new MailAddress(mailFrom);
      message.To.Add("xxx@gmail.com");
      message.Subject = "subject";
      message.SubjectEncoding = Encoding.UTF8;

      message.IsBodyHtml = true;
      message.Body = "<h1>VODA</h1>";
      message.BodyEncoding = Encoding.UTF8;

      AlternateView plainView = AlternateView.CreateAlternateViewFromString("test content", Encoding.UTF8, "text/plain");
      message.AlternateViews.Add(plainView);

      SmtpClient smtpClient = new SmtpClient(smtpServer);

      smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
      smtpClient.UseDefaultCredentials = false;
      smtpClient.Credentials = new System.Net.NetworkCredential("user", "pass");
      smtpClient.EnableSsl = true;
      smtpClient.Port = 587;
      smtpClient.Send(message);
    }

在查看gmail收到的内容时,我会看到下一步:

Subject: subject
Content-Type: multipart/alternative; boundary=--boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e
Message-Id: <20161208131903.36280C956C@in-1.mail.xxx.net>

----boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

PGgxPlZPREE8L2gxPg==
----boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

dGVzdCBjb250ZW50
----boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e--

为什么System.Net.Mail.MailMessage没有设置text/html种类型?

Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

PGgxPlZPREE8L2gxPg==

我错过了任何其他MailMessage属性吗?

2 个答案:

答案 0 :(得分:3)

当您使用AlternateViews时,Body应该是text/plainAlternateViews可以提供不同的内容类型。从文档(https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx):

  

要向MailMessage对象添加备用视图,请为视图创建附件,然后将其添加到AlternateViews返回的集合中。使用Body属性指定文本版本,并使用AlternateViews集合指定其他MIME类型的视图。

答案 1 :(得分:0)

答案写在这篇文章中:GMail displays plain text email instead HTML

  

尝试切换消息部分的顺序,将HTML部分放在纯文本部分之后。它可能有用:)。

     

注意:我现在不记得我在哪里阅读(或者如果我确定的话),但切换可能有帮助的原因是因为我认为消息的首选部分可能是最后一部分。

     

更新:我找到了一个地方,它表示多部分MIME消息中的部分应该按照优先级递增的顺序排列 - 这里,在第7.2.3节中,从第三段到最后一段开始。

text/html gmail显示html内容后添加text/plain后。 Microsoft Exchange虽然显示了消息的html版本,但它并不介意添加版本的顺序。

AlternateView plainView = AlternateView.CreateAlternateViewFromString("test content", Encoding.UTF8, "text/plain");
message.AlternateViews.Add(plainView);

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, Encoding.UTF8, "text/html");
message.AlternateViews.Add(htmlView);