NET生成HTML电子邮件

时间:2019-04-25 15:54:39

标签: c# .net email html-email smtpclient

我已经努力了两天,用.NET应用程序生成简单的HTML电子邮件。在这个主题上已经有几个answered questions,并且在每种情况下语法都相对简单。我仍然花了一天多的时间才能开始工作。但是,该解决方案提出了更多问题。我已经看过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);

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

3 个答案:

答案 0 :(得分:3)

我认为对此的解释很简单。

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

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

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

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

答案 1 :(得分:2)

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

我不确定IsBodyHTML的内容,但它可能会创建完整的HTML(<html><head><body>etc....),因此可以尝试一下。

答案 2 :(得分:1)

内部不适合您的超载看起来像这样

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

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