使用 .NET 生成 HTML 封电子邮件

Generate HTML Email with .NET

为了使用 .NET 应用程序生成一封简单的 HTML 电子邮件,我已经苦苦挣扎了两天。有好几个answered questions on this topic already, and in each case the syntax is relatively simple. It still took me over a day to get it to work. However, the solution raises more questions. I have looked to the Microsoft documentation,什么都没找到。

此语法有效并将生成 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);

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

因为按照您的方式使用发送功能时,没有指定 IsBodyHTML 设置为 true。我认为 IsBodyHTMLMailMessage 对象中。

我不完全确定 IsBodyHTML 在 body 中设置了什么,但它可能会创建完整的 HTML (<html><head><body>etc....),所以不妨试试看。

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

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

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

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

在第二种情况下,Send() 方法获取的唯一值是四个字符串(fromtosubjectbody)。它不会收到有关电子邮件的任何其他信息。 isBodyHTML 属性 从未使用过,因为它是未使用的 MailMessage.

的一部分

在内部对您不起作用的过载看起来或多或少像这样

MailMessage mailMessage = new MailMessage(from, recipients, subject, body);
Send(mailMessage);

它创建了一个未设置 IsBodyHtml 的 MailMessage 实例并调用了另一个重载。 IsBodyHtml 控制用于邮件正文 MimePart 的媒体类型,如果未设置 IsBodyHtml,将使用 PlainText 代替 Html MimePart。设置 IsBodyHtml 不会以任何方式更改 Body 属性 的内容,因此您必须使用 MailMessage 的重载,以便您可以显式设置 IsBodyHtml。