我正在测试通过 C# 发送一些电子邮件,但我不知道设置有什么IsBodyHtml
效果true
。无论值如何,我在正文中发送的任何内容都会以“文本/纯文本”的内容类型显示,而我的 HTML 会显示标签,并且全部显示在我的电子邮件客户端 (gmail) 中。那面旗帜实际上应该做什么?
注意:我可以通过创建内容类型为“text/html”的邮件来发送 HTML 电子邮件AlternateView
,我只是想了解设置正文应该如何工作。
我正在测试通过 C# 发送一些电子邮件,但我不知道设置有什么IsBodyHtml
效果true
。无论值如何,我在正文中发送的任何内容都会以“文本/纯文本”的内容类型显示,而我的 HTML 会显示标签,并且全部显示在我的电子邮件客户端 (gmail) 中。那面旗帜实际上应该做什么?
注意:我可以通过创建内容类型为“text/html”的邮件来发送 HTML 电子邮件AlternateView
,我只是想了解设置正文应该如何工作。
这是我每天使用的 SMTP 助手的摘录……
public bool SendMail(string strTo, string strFrom, string strCc, string strBcc, string strBody, string strSubject)
{
bool isComplete = true;
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
try
{
//Default port will be 25
smtpClient.Port = 25;
message.From = new MailAddress(smtpEmailSource);
message.To.Add(strTo);
message.Subject = strSubject;
if (strCc != "") { message.Bcc.Add(new MailAddress(strCc)); }
if (strBcc != "") { message.Bcc.Add(new MailAddress(strBcc)); }
message.IsBodyHtml = true;
string html = strBody; //I usually use .HTML files with tags (e.g. {firstName}) I replace with content. This allows me to edit the emails in VS by opening a .HTML file and it's easy to do string replacements.
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html"));
message.AlternateViews.Add(htmlView);
// Send SMTP mail
smtpClient.Send(message);
}
catch
{
isComplete = false;
}
return isComplete;
}
[更新]
我最初离开的关键点......
IsBodyHtml 声明您的消息是 HTML 格式的。如果您只发送一个 HTML 视图,这就是您所需要的。
AlternateView 用于存储我的 HTML,这不是发送 HTML 消息所必需的,但如果您想发送包含 HTML 和纯文本的消息,则它是必需的,以防接收者无法呈现 HTML。
我在上面拿出了我的plainView,所以这并不明显,对不起......
这里的关键是,如果您想发送 HTML 格式的消息,您需要使用 IsBodyHtml = true(默认为 false)将您的内容呈现为 HTML。
我只是在与同样的问题搏斗。我最好的解决方案是完全避免设置对象的Body
属性MailMessage
。相反,只需添加两个AlternateView
s,首先是纯文本,然后是 HTML。确保首先添加纯文本版本,因为 MIME 标准规定:
这些格式按照它们对原作的忠实程度排序,最不忠实的在前,最忠实的在后。
这意味着,您将纯文本版本放在首位,因此客户端应尽可能使用 HTML 版本。
IsBodyHtml – 指定正文是否包含文本或 HTML 标记。
正文包含应由 IsBodyHtml 识别的文本或 html 标记。