首页 > 解决方案 > 使用 .NET 生成 HTML 电子邮件

问题描述

两天来,我一直在努力使用 .NET 应用程序生成简单的 HTML 电子邮件。关于这个主题已经有几个已回答的 问题,并且每种情况的语法都相对简单。我仍然花了一天多的时间让它开始工作。然而,该解决方案提出了更多问题。我查看了 Microsoft文档,但没有发现任何内容。

此语法有效,并将生成 HTML 电子邮件:

MailMessage message = new MailMessage();
message.Subject = "Test";
message.From = new MailAddress("user@athisaddress.com");
message.To.Add("me@myorg.com");
message.Body = "<strong>This is a test</strong>";
message.IsBodyHtml = true;
smtpClient.Send(message);

但是,如果我使用具有四个参数签名的 SmtpClient 对象的 Send 方法,它将不会生成 HTML 电子邮件:

smtpClient.Send("user@athisaddress.com", "me@myorg.com", 
    message.Subject, message.Body);

谁能解释为什么会这样。它是记录在案的,还是一个已知的“问题”?IsBodyHtml 在这两种情况下都设置为 true。

标签: c#.netemailhtml-emailsmtpclient

解决方案


我认为对此的解释相当简单。

在第一种情况下,您在对象中明确设置isBodyHtml为 true 。MailMessage然后将MailMessage对象传递给Send()方法。因此,它会按照您的说明将电子邮件格式化为 HTML。

在第二种情况下,您无法告诉系统电子邮件应该是什么格式。纯文本通常是默认格式,因此在没有任何其他说明的情况下,我希望这就是它将使用的格式。

注意,您声称isBodyHTML在这两种情况下都设置为 true,但这没有任何意义。在第二种情况下,您没有将MailMessage对象传递给方法......该IsBodyHtml属性属于MailMessage. 那么,您还能如何以及在哪里设置这样的值呢?

在第二种情况下,该方法获得的唯一值是Send()四个字符串(fromto和)。它不会收到有关电子邮件的任何其他信息。该属性从未使用过,因为它是 un-used 的一部分。subjectbodyisBodyHTMLMailMessage


推荐阅读