C# 使用.NET生成HTML电子邮件

C# 使用.NET生成HTML电子邮件,c#,.net,email,html-email,smtpclient,C#,.net,Email,Html Email,Smtpclient,两天来,我一直在努力用.NET应用程序生成一封简单的HTML电子邮件。在这个主题上已经有好几种,并且在每种情况下语法都相对简单。我还是花了一天多的时间才把它修好。然而,解决方案提出了更多的问题。我查看了微软,但在那里什么也没发现 此语法有效并将生成HTML电子邮件: MailMessage message = new MailMessage(); message.Subject = "Test"; message.From = new MailAddress("user@athisaddress

两天来,我一直在努力用.NET应用程序生成一封简单的HTML电子邮件。在这个主题上已经有好几种,并且在每种情况下语法都相对简单。我还是花了一天多的时间才把它修好。然而,解决方案提出了更多的问题。我查看了微软,但在那里什么也没发现

此语法有效并将生成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("user@athisaddress.com", "me@myorg.com", 
    message.Subject, message.Body);

有人能解释为什么会发生这种情况吗。它是有文件记录的,还是一个已知的“问题”IsBodyHtml在这两种情况下都设置为true。

,因为在使用发送功能时,没有将
IsBodyHtml的指定设置为true。我认为
IsBodyHTML
MailMessage
对象中


我不完全确定主体HTML设置了什么,但它可能会创建完全格式的HTML(等等…
),所以不妨尝试一下。

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

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

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

注意:您声称在这两种情况下,
isBodyHTML
都设置为true,但这没有任何意义。在第二种情况下,您没有向方法传递
MailMessage
对象,
IsBodyHtml
属性属于
MailMessage
。那么,除此之外,你还能在哪里设置这样的值呢


在第二个场景中,
Send()
方法获取的唯一值是四个字符串(
from
to
subject
body
)。它不会收到有关电子邮件的任何其他信息。从不使用
isBodyHTML
属性,因为它是未使用的
MailMessage

的一部分。内部不适用的重载看起来或多或少像这样

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

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

注意:有点迂腐:所有这些都与ASP.NET或WebForms无关。smtp邮件库可供任何类型的.NET应用程序使用。我在这两种情况下都设置了smtp邮件库,我将在问题中包括它。你可以自己测试一下——这让人困惑!阿德森,说得好。如果需要,请调整标签。我已经调整了标签。您可能需要调整标题和正文中的措辞,如何调整?在第二种情况下,您没有将MailMessage对象传递给该方法…IsBodyHtml属性属于MailMessage。那么,除此之外,您是如何以及在何处设置此值的呢?在这个场景中,Send方法只获取四个字符串(from、to、subject和body)。它没有收到关于电子邮件的任何其他信息。我已更新了问题。我发布的代码版本是为了简单。实际上,我传递了第3个和第4个参数的消息对象属性,但您没有传递消息对象。您只传递了消息的主题和正文,这两个字符串。通过传递消息对象的特定成员,发送方法无法使用消息对象的其余部分。您的编辑没有将message对象的.isBodyHTML成员传递给Send方法。感谢您的帮助,向上投票。我给了杰克第一个答案;-)我想你成功了。我认为,通过对subject和body参数使用消息属性,.NET可以知道消息对象的其他属性。显然不是这样。如果对象的传递成员授予了对该对象的访问权,这将违反面向对象编程语言的基本原则。AgapwIesu,或者可能更大的范围问题,因为我在调用环境中创建并拥有该对象?您可以多次将IsBodyHtml设置为True,并用粗体书写,但后来你再也不用了。您只向构造函数发送了4个字符串,其中没有一个是IsBodyHtml属性。正如ADyson在其他评论中提到的,接收4个字符串的构造函数的默认行为是构建一个纯文本电子邮件消息并发送它。