我已经努力了两天,用.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。
答案 0 :(得分:3)
我认为对此的解释很简单。
在第一种情况下,您在isBodyHtml
对象中将MailMessage
显式设置为true。然后,您将MailMessage
对象传递给Send()
方法。因此,按照您的说明,它将电子邮件格式设置为HTML。
在第二种情况下,您无法通过任何方式告诉系统电子邮件应采用的格式。纯文本通常是默认格式,因此,在没有任何其他说明的情况下,我希望这将是纯文本格式。
您声称isBodyHTML
在两种情况下都设置为true,但这没有任何意义。在第二种情况下,您没有将MailMessage
对象传递给方法... IsBodyHtml
属性属于MailMessage
。那么,您还可以在哪里设置这样的值呢?
在第二种情况下,Send()
方法获得的唯一值是四个字符串(from
,to
,subject
和body
)。它没有收到有关该电子邮件的任何其他信息。永远不会使用isBodyHTML
属性,因为它是未使用的MailMessage
的一部分。
答案 1 :(得分:2)
因为按照您的方式使用发送功能时,没有将IsBodyHTML
的指定设置为true。我认为IsBodyHTML
在MailMessage
对象中。
我不确定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。