首页 > 解决方案 > 如何发送带有 HTML 标签的电子邮件,而不是 C# 中的 HTML 纯文本

问题描述

我想使用 C# 发送电子邮件,但发送的是纯 HTML 文本,而不是 HTML 标记。

下面是一些代码..

StringBuilder pl_sbHtml = new StringBuilder();

pl_sbHtml.Append("<html>");
pl_sbHtml.Append("<head>");
pl_sbHtml.Append("</head>");
pl_sbHtml.Append("<body>");
pl_sbHtml.Append("<td>"+ Content Data + "</td>"); // This Content Data is from DB with HTML Tag
pl_sbHtml.Append("</body>");
pl_sbHtml.Append("</html>");

MailAction pl_objMail = new MailAction("Title", pl_sbHtml.ToString(), SmtpHost);

pl_objMail.IsBodyHtml = true;
pl_objMail.AddToMail(TO);
pl_objMail.SetFromMail(FROM);
pl_objMail.UseDefaultCredentials = false;
pl_objMail.SendMail();

电子邮件中的当前结果:( < div style='font:30px'> HELLO < /div>可以看到 HTML 标记。)

电子邮件中的预期结果:

HELLO(应用 HTML 标签)谢谢!

标签: c#htmlemailsmtp

解决方案


电子邮件内容可能非常有趣,电子邮件客户端也各不相同。我在 Outlook 中对此进行了测试

与原始陈述的内容< div style='font:30px'> HELLO < /div>

并且它没有正确渲染。通过一些试验和错误,似乎 html 标签中的前导空格导致了问题。

pl_sbHtml.Append("<td>" + "<div style='font:30px'> HELLO </div>" + "</td>");

按预期呈现

再看OP上的评论,不管是IsBodyHtml = true在设置body之前设置还是之后设置,只要在发送之前设置就可以了。

测试代码:

StringBuilder pl_sbHtml = new StringBuilder();

var from = "steve@ste-fu.uk";
var to = "steve@ste-fu.uk";

pl_sbHtml.Append("<html>");
pl_sbHtml.Append("<head>");
pl_sbHtml.Append("</head>");
pl_sbHtml.Append("<body>");
pl_sbHtml.Append("<td>" + "<div style='font:30px'> HELLO </div>" + "</td>");
pl_sbHtml.Append("</body>");
pl_sbHtml.Append("</html>");

MailMessage pl_objMail = new MailMessage();

pl_objMail.Body = pl_sbHtml.ToString();
pl_objMail.IsBodyHtml = true;
pl_objMail.Subject = "Testing";
pl_objMail.To.Add(to);
pl_objMail.From = new MailAddress(from);

var client = new SmtpClient("smtp.ste-fu.uk");
client.Send(pl_objMail);

推荐阅读