SMTP MailMessage 正文中的换行符

Car*_*rel 3 css c# asp.net 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>
Run Code Online (Sandbox Code Playgroud)

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

EmailBatchHelper.SendBatch(recipients, txtNotificationTo.Text, txtFrom.Text.TrimEnd(), txtBody.Text, txtSubject.Text, strAtt);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

mail.Body = "test\r\n\r\ntest";
Run Code Online (Sandbox Code Playgroud)

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

Tie*_* T. 5

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

  • 确保该IsBodyHtml属性在您的MailMessage对象上设置为 false ,或者
  • \r\n<br />元素替换任何实例,然后设置 IsBodyHtml为 true。这可以通过一行简单的代码来完成:

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

另一种选择是将换行符/返回字符编码/转换为实体

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