SMTP MailMessage正文中的换行符

时间:2014-05-02 09:03:38

标签: c# asp.net css email sql-server-2012

我有一个ASP.NET Web应用程序,它有一个页面可以将电子邮件发送到收件人列表。此页面有asp:TextBox,其中输入邮件正文:

<asp:TextBox ID="txtBody" runat="server" Height="151px" TextMode="MultiLine" Width="550px" Visible="False" MaxLength="160"></asp:TextBox>

然后,该页面使用REST服务将电子邮件详细信息插入数据库:

EmailBatchHelper.SendBatch(recipients, txtNotificationTo.Text, txtFrom.Text.TrimEnd(), txtBody.Text, txtSubject.Text, strAtt);

Windows服务从数据库中读取电子邮件并使用smpt发送它们。

我遇到的问题是身体中的换行符被删除。我猜它什么时候插入数据库。如何在用户收到的消息中仍然存在任何换行符?

更新: 我调试了Windows服务并确定了以下内容:

插入到数据库中的是单词test两次,其间有2个换行符。设置为MailMessage的Body的值如下:

mail.Body = "test\r\n\r\ntest";

现在我想在MailMessage上可能有一个设置来解释Body中的换行符

1 个答案:

答案 0 :(得分:3)

如上面的评论所示,此行为的最常见原因是尝试将纯文本作为HTML编码的邮件发送。回车符/换行符在HTML中没有意义,因此换行符不会显示。所以,有两个快速修复:

  • 确保您的IsBodyHtml属性设置为false MailMessage个对象或
  • \r\n的所有实例替换为<br />元素,然后设置 IsBodyHtml为真。这可以通过one simple line

    完成

    _yourEmailContent.Replace(Environment.NewLine, "<br />").ToString();

另一种方法是将换行符/返回字符编码/转换为entities

_yourEmailContent.Replace(Environment.NewLine, "&#x000D;&#x000A;").ToString();