【问题标题】:Send html email message and plainText as alternative发送 html 电子邮件和纯文本作为替代
【发布时间】:2017-04-23 18:15:20
【问题描述】:
    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 属性吗?

【问题讨论】:

    标签: c# email system.net.mail


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      答案写在这个帖子里:GMail displays plain text email instead HTML

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

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

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

      添加text/html text/plain gmail 显示html内容。 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        • 2011-04-04
        • 2011-09-24
        • 2023-01-18
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        相关资源
        最近更新 更多