【问题标题】:MailMessage in HTML with AlternateView in Text not workingHTML 中的 MailMessage 与 Text 中的 AlternateView 不起作用
【发布时间】:2016-09-08 08:21:57
【问题描述】:

谁能解释为什么这段代码不起作用:

async Task Main()
{
    using (var smtpClient = new SmtpClient(@"127.0.0.1", 25))
    {
        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        var from = new MailAddress(@"sender@mydomain.com");
        var to = new MailAddress(@"receiver@mydomain.com");
        using (var message = new MailMessage())
        {
            message.Subject = "Email Subject";
            message.Body = "<html><head></head><body><h1>Hello World!</h1></body></html>";
            message.IsBodyHtml = true;
            message.From = from;
            message.To.Add(to);
            message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("Hello World!", null, MediaTypeNames.Text.Plain));
            await smtpClient.SendMailAsync(message);
        }
    }
}

输出消息是:

MIME 版本:1.0 发件人:sender@mydomain.com 收件人:receiver@mydomain.com 日期:2016 年 5 月 12 日 14:51:30 +0200 主题:电子邮件主题内容类型: 多部分/替代; 边界=--boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f

----boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f 内容类型:文本/纯文本; charset=us-ascii 内容传输编码: 引用可打印

世界你好!

----boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f 内容类型:文本/纯文本; charset=us-ascii 内容传输编码: 引用可打印

世界你好! ----boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f--

此代码正在运行:

async Task Main()
{
    using (var smtpClient = new SmtpClient(@"127.0.0.1", 25))
    {
        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        var from = new MailAddress(@"sender@mydomain.com");
        var to = new MailAddress(@"receiver@mydomain.com");
        using (var message = new MailMessage())
        {
            message.Subject = "Email Subject";
            message.Body = "Hello World!";
            message.IsBodyHtml = false;
            message.From = from;
            message.To.Add(to);
            message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>Hello World!</h1></body></html>", null, MediaTypeNames.Text.Html));
            await smtpClient.SendMailAsync(message);
        }
    }
}

输出很好

MIME 版本:1.0 发件人:sender@mydomain.com 收件人:receiver@mydomain.com 日期:2016 年 5 月 12 日 14:46:52 +0200 主题:电子邮件主题内容类型: 多部分/替代; 边界=--boundary_1_2d888597-e405-40cb-8bd4-1bfcba04fb44

----boundary_1_2d888597-e405-40cb-8bd4-1bfcba04fb44 内容类型:文本/纯文本; charset=us-ascii 内容传输编码: 引用可打印

世界你好! ----boundary_1_2d888597-e405-40cb-8bd4-1bfcba04fb44 内容类型:text/html; charset=us-ascii 内容传输编码: 引用可打印

世界你好!

----boundary_1_2d888597-e405

-40cb-8bd4-1bfcba04fb44--

这段代码正在运行:

async Task Main()
{
    using (var smtpClient = new SmtpClient(@"127.0.0.1", 25))
    {
        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        var from = new MailAddress(@"sender@mydomain.com");
        var to = new MailAddress(@"receiver@mydomain.com");
        using (var message = new MailMessage())
        {
            message.Subject = "Email Subject";
            message.From = from;
            message.To.Add(to);
            message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>Hello World!</h1></body></html>", null, MediaTypeNames.Text.Html));
            message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("Hello World!", null, MediaTypeNames.Text.Plain));
            await smtpClient.SendMailAsync(message);
        }
    }
}

输出也不错:

MIME 版本:1.0 发件人:sender@mydomain.com 收件人:receiver@mydomain.com 日期:2016 年 5 月 12 日 15:07:24 +0200 主题:电子邮件主题内容类型: 多部分/替代; 边界=--boundary_3_fa7662d6-404a-4c86-a775-373355aa41e2

----boundary_3_fa7662d6-404a-4c86-a775-373355aa41e2 Content-Type: text/html; charset=us-ascii 内容传输编码: 引用可打印

世界你好!

----boundary_3_fa7662d6-404a-4c86-a775-373355aa41e2 内容类型:text/plain; charset=us-ascii 内容传输编码: 引用可打印

世界你好! ----boundary_3_fa7662d6-404a-4c86-a775-373355aa41e2--

编辑:任何人都可以帮助在输出中不解释 html 标签吗?

【问题讨论】:

  • 将 MediaTypeNames.Text.Plain 更改为 MediaTypeNames.Text.Html
  • 你看过这里吗? msdn.microsoft.com/en-us/library/…
  • @merhardik 为什么会这样?如果内容是纯文本,则将其设置为纯文本。
  • @JaggenSWE 此代码与第二个代码相同

标签: c# mailmessage


【解决方案1】:

我昨天遇到了完全相同的问题; 感谢 cmets 中指出的 MSDN 阅读,这就是我所理解的。

当您发送消息时,Body 属性专用于电子邮件的文本内容,如此处所述link

使用 Body 属性指定文本版本并使用 AlternateViews 集合以指定具有其他 MIME 类型的视图

无论出于何种原因,如果您在设置正文内容后添加任何 AlternateView,正文将重置为纯文本。

对我来说,你的最后一个例子似乎是让事情变得更有活力的方法;

message.Subject = "Email Subject";
message.From = from;
message.To.Add(to);
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>Hello World!</h1></body></html>", null, MediaTypeNames.Text.Html));
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("Hello World!", null, MediaTypeNames.Text.Plain));
await smtpClient.SendMailAsync(message);

【讨论】:

    猜你喜欢
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2013-11-03
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多