SMTP MailMessage正文中的换行符

本文关键字:换行符 正文 MailMessage SMTP | 更新日期: 2023-09-27 18:01:22

我有一个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发送它们。

我遇到的问题是正文中的换行符沿着一行的某个地方被删除。我猜是当它被插入数据库时。我怎样才能让用户收到的消息中仍然存在换行符?

Update:我调试了windows服务,确定了以下内容:

插入到数据库中的

是单词test两次,中间有两个换行符。设置为MailMessage正文的值如下:

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

现在我认为MailMessage上可能有一个设置来解释Body

SMTP MailMessage正文中的换行符

中的换行符

如上面的注释所示,这种行为最常见的原因是试图将纯文本作为html编码的消息发送。回车符/换行符在HTML中没有意义,因此不显示换行符。因此,有两种快速修复方法:

  • 确保您的IsBodyHtml属性设置为falseMailMessage对象,或
  • <br />元素替换'r'n的任何实例,然后设置IsBodyHtml为true。这可以用一行来完成:

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

另一种方法是将换行符/返回符编码/转换为实体:

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