MailMessage在HTML中使用AlternateView的Text格式不起作用

4

有人能解释一下为什么这段代码不起作用吗:

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-Version: 1.0 发件人: sender@mydomain.com 收件人: receiver@mydomain.com 日期: 2016年5月12日14:51:30 +0200 主题: 邮件主题 内容类型: multipart/alternative; boundary=--boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f

----boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f 内容类型: text/plain; 字符集=us-ascii 内容传输编码: quoted-printable

Hello World!

----boundary_2_be88a42a-4d48-4096-b4e0-71fb7857809f 内容类型: text/plain; 字符集=us-ascii 内容传输编码: quoted-printable

Hello World! ----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-Version: 1.0 From: sender@mydomain.com To: receiver@mydomain.com Date: 12 May 2016 14:46:52 +0200 Subject: Email Subject Content-Type: multipart/alternative; boundary=--boundary_1_2d888597-e405-40cb-8bd4-1bfcba04fb44

----boundary_1_2d888597-e405-40cb-8bd4-1bfcba04fb44 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable

Hello World! ----boundary_1_2d888597-e405-40cb-8bd4-1bfcba04fb44 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: quoted-printable

Hello World!

----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 内容类型: text/html; 字符集=us-ascii 内容传输编码: quoted-printable

Hello World!

----boundary_3_fa7662d6-404a-4c86-a775-373355aa41e2 内容类型: text/plain; 字符集=us-ascii 内容传输编码: quoted-printable

Hello World! ----boundary_3_fa7662d6-404a-4c86-a775-373355aa41e2--

编辑:有谁可以帮助使输出中不解释 HTML 标签?


将 MediaTypeNames.Text.Plain 更改为 MediaTypeNames.Text.Html。 - Hardik Mer
你看过这里吗?https://msdn.microsoft.com/zh-cn/library/system.net.mail.mailmessage.alternateviews(v=vs.110).aspx - JaggenSWE
@merhardik 为什么这样做?如果内容是纯文本,你就将其设置为纯文本。 - JuChom
@JaggenSWE,这段代码与第二段代码相同。 - JuChom
1个回答

5
我昨天遇到了完全相同的问题;感谢评论中提到的MSDN阅读,我理解了以下内容。
当您发送一条消息时,正文属性专用于电子邮件的文本内容,如此处所述:链接 引用:
使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接