如何通过SMTP保留换行符,其中电子邮件正文需要支持HTML



所以我正在构建一个自动电子邮件脚本,一旦员工记录问题,就会向他们发送收据,电子邮件需要允许HTML

但是,当我从数据库中提取描述并将其显示在.aspx page的前端(asp:textbox(时,它会显示换行符,格式正确,但是当我通过SMTP将描述发送给收件人时,换行符(换行符(不会将文本换行到新行。

例如: 示例字符串:"Bob 是人类, 他喜欢篮球" 在asp:textbox控件中,它可以正确呈现,但在通过电子邮件发送时,它不会。

这有什么裂缝?我是否需要在n通过时用HTML断裂替换它们,或者您可以保留它们吗?

以下是脚本的基本思想:

SmtpClient client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.outlook.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(serverEmail, serverEmailAuthToken);
MailMessage mm = new MailMessage(serverEmail, recipient, "Tasket Report Number: "
+ tasketTitle + " has been received.",
"Tasket Report Number: " + tasketTitle + "<br/>"
+ "Problem Domain: " + domain + "<br/>"
+ "Report Type: " + type + "<br/>"
+ "Report Area: " + area + "<br/>"
+ "Description: " + description
+ "<br/>");
mm.IsBodyHtml = true;
mm.BodyEncoding = UTF8Encoding.UTF8;
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
client.Send(mm);
n

是HTML渲染器的空格。

您需要将换行符转换为<br />标记或段落,以便在 HTML 邮件正文中呈现为换行符。

并且您应该确保实际文本HtmlEncoded。如果不这样做,可以使用用户输入将标记注入邮件中。

经过时间考验的实用程序函数集,我特此声明您的开源:

public string enc(string s)
{
return System.Web.HttpUtility.HtmlEncode(s);
}
/// <summary>
/// HTML-encodes a string after replacing its newlines with br tags
/// </summary>
public string enc_br(string s)
{
if (String.IsNullOrWhiteSpace(s))
return s;
var lines = s.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
if (lines.Length == 1)
return enc(lines[0]);
else
{
for (var i = 0; i < lines.Length; ++i)
{
lines[i] = enc(lines[i]);
}
return String.Join("<br />", lines);
}
}

示例用法:

...  + "Problem Domain: " + enc_br(domain) + "<br/>"

请考虑使用String.Format,或者,如果您使用的是足够新的 .NET 版本,则使用字符串内插:它将大大提高合成的可读性。

最新更新