猿问

使用 .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。


弑天下
浏览 131回答 3
3回答

DIEA

我认为对此的解释相当简单。在第一种情况下,您在对象中明确设置isBodyHtml为 true 。MailMessage然后将MailMessage对象传递给Send()方法。因此,它会根据您的指示将电子邮件格式化为 HTML。在第二种情况下,您无法告诉系统电子邮件的格式。纯文本通常是默认格式,因此在没有任何其他说明的情况下,我希望它会使用这种格式。NB You claim&nbsp;isBodyHTMLwas set to true 在这两种情况下,但这没有任何意义。在第二种情况下,您没有将MailMessage对象传递给方法...该IsBodyHtml属性属于MailMessage.&nbsp;那么,您还可以如何以及在哪里设置这样的值?在第二种情况下,该方法获取的唯一值是Send()四个字符串(from、to和)。它不会收到有关电子邮件的任何其他信息。该属性从未使用过,因为它是 un-used 的一部分。subjectbodyisBodyHTMLMailMessage

守着一只汪

IsBodyHTML因为按照您的方式使用 Send 函数时,没有指定set 为 true 。我认为IsBodyHTML是在MailMessage对象内。我不完全确定IsBodyHTMLbody 中设置了什么,但它可能会创建完整格式的 HTML (<&nbsp;html><head><body>etc....),所以不妨试试看。

杨魅力

在内部对您不起作用的过载看起来或多或少像这样MailMessage&nbsp;mailMessage&nbsp;=&nbsp;new&nbsp;MailMessage(from,&nbsp;recipients,&nbsp;subject,&nbsp;body); Send(mailMessage);它创建一个 MailMessage 实例,不设置 IsBodyHtml 并调用其他重载。IsBodyHtml 控制用于邮件正文 MimePart 的 MediaType,如果未设置 IsBodyHtml,将使用 PlainText 代替 Html MimePart。设置 IsBodyHtml 不会以任何方式更改 Body 属性的内容,因此您必须使用 MailMessage 的重载,以便您可以显式设置 IsBodyHtml。
随时随地看视频慕课网APP
我要回答