使用.NET生成HTML电子邮件

问题描述 投票:2回答:3

我已经苦苦挣扎了两天,用.NET应用程序生成一个简单的HTML电子邮件。关于这个主题已经有几个answered questions,并且在每种情况下语法都相对简单。我花了一天多的时间才开始工作。但是,该解决方案提出了更多问题。我看过微软documentation并没有发现任何东西。

此语法有效并将生成HTML电子邮件:

MailMessage message = new MailMessage();
message.Subject = "Test";
message.From = new MailAddress("[email protected]");
message.To.Add("[email protected]");
message.Body = "<strong>This is a test</strong>";
message.IsBodyHtml = true;
smtpClient.Send(message);

但是,如果我使用具有四个参数的签名的SmtpClient对象的Send方法,它将不会生成HTML电子邮件:

smtpClient.Send("[email protected]", "[email protected]", 
    message.Subject, message.Body);

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

c# .net email html-email smtpclient
3个回答
2
投票

因为当你使用Send函数时,没有将IsBodyHTML设置为true的指定。我认为IsBodyHTMLMailMessage对象内。

我不完全确定IsBodyHTML在体内设置了什么,但它可能会创建完全形成的HTML(<html><head><body>etc....),所以也许试一试。


3
投票

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

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

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

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

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


1
投票

内部不起作用的重载看起来或多或少是这样的

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

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

© www.soinside.com 2019 - 2024. All rights reserved.