c# - 如何发送带有 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 标签)谢谢!解决方案
电子邮件内容可能非常有趣,电子邮件客户端也各不相同。我在 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);