MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符

Posted

技术标签:

【中文标题】MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符【英文标题】:MailMessage sent string as body without newline in outlook 【发布时间】:2011-04-25 06:56:34 【问题描述】:

您好,我正在尝试使用 system.net.mail.mailmessage 发送一个简单的通知。我只是将字符串作为消息正文传递。但问题是即使发送的多行消息在字符串中具有正确的“\r\n”格式信息。邮件 在 Outlook 中打开将显示为一条长单线。但是在 Outlook 中查看源代码会以正确的新行格式显示消息。

例如: 原始消息如下所示:

line1
line 2
line 3

但它会在 Outlook 中显示如下:

line1 line 2 line 3

仍然会显示来自 Outlook 的查看源代码

line1
line 2
line 3

我应该怎么做才能让 Outlook 显示带有正确换行信息的消息?

【问题讨论】:

【参考方案1】:

Outlook 有时会删除换行符(它通常会弹出一条评论说它也这样做了),不确定何时执行此操作的规则,但我相当确定您是否添加了 .(句号) 在每一行的末尾它不会删除它们。

实际上,看这篇文章,您似乎也可以通过以 html 或 RTF 格式发送电子邮件来解决它:Line breaks are removed in posts made in plain text format in Outlook

【讨论】:

但是为什么为什么为什么,outlook默认尝试删除纯文本中的换行符超出了我的范围! @pstar:我认为这是为了解决换行问题。就像您向我发送一封以 80 个字符换行的电子邮件一样,我有相同的设置 + 它应该在响应前加上 > 我的响应会再次换行,因此您的原始文本最终会看起来很丑陋。跨度> 我对文本编辑应用程序的功能没有经验。但在我看来,它试图解决句柄换行的问题,并通过尝试删除额外的换行符来引用原始消息。我想我宁愿电子邮件应用程序尝试保持我的电子邮件格式信息不变。希望他们在 Outlook 2010 中改变这种行为。【参考方案2】:

让你的字符串如下所示

"Your string.\n"

还有:

ms.IsBodyHtml = false;

但你可能会在垃圾文件夹中找到它

【讨论】:

【参考方案3】:

这对我有用

mMailMessage.IsBodyHtml = true;
Literal1.Text = "Dear Admin, <br/>You have recieved an enquiry onyour Website. Following are the details of enquiry:<br/><br/>Name: " + TextBox2.Text + "<br/>Address: " + TextBox3.Text + ", " + TextBox4.Text + "<br/>Phone: " + TextBox5.Text + "<br/>Email: " + TextBox2.Text + "<br/>Query: " + TextBox6.Text+"<br/> Regards, <br/> Veritas Team";
mMailMessage.Body = Literal1.Text;

【讨论】:

添加“”对我有用。作为背景,我采用了一个包含电子邮件正文文本的单元格值,并将 Chr(10) 替换为“”,以便 Outlook 草案电子邮件正文正确显示。【参考方案4】:

//邮件正文应为 HTML //将换行符 \n\r 替换为 HTML

mailMsg.IsBodyHtml = true;
mailMsg.Body = this.Body;
mailMsg.BodyEncoding = System.Text.Encoding.ASCII;
mailMsg.Body = mailMsg.Body.Replace(Environment.NewLine, "<br/>"); 

【讨论】:

【参考方案5】:

Outlook 将始终删除换行符,但是,可以使用以下内容:

而不是使用: 环境.换行 要么 \n\r

你应该使用 string MyString += "这是我的文字" + "%0d%0A"

这个 %0d%0A 将被 Outlook 识别为换行符的转义序列。

【讨论】:

True - 这曾经可以工作,但现在这会发送一条缺少换行符的消息。在 Outlook 中,您需要单击消息中的顶部横幅并选择恢复换行符。暂时没有解决办法 啊,好吧。感谢您的反馈。请参阅下面的答案,了解我最终如何让它与 Outlook 2013 一起使用。【参考方案6】:

将 IsBodyHTML 设置为 false:

ms.IsBodyHtml = false;

默认情况下它是假的,但你似乎在某处将它设置为真,因为 Outlook 认为它是 HTML。

【讨论】:

我尝试不将 IsBodyHtml 设置或显式设置为 false,这两种方法似乎都不起作用。【参考方案7】:

这对我有用:

    mail.Body = String.Format(@"Some text here:
A new line here  
And another line here");

注意不要在第 2 行和第 3 行缩进。

【讨论】:

【参考方案8】:

我能够通过在问题行之前的行尾添加一些字符串空格来使其工作。

msg.Append("\n some Message" + "   ");
msg.Append("\n another message");

【讨论】:

【参考方案9】:

死灵回答一个问题,但对某些人来说也可以派上用场。

msg.IsBodyHtml = true;
AlternateView av = AlternateView.CreateAlternateViewFromString(msg.Body, new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Html));
av.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
msg.AlternateViews.Add(av);
AlternateView avPlain = AlternateView.CreateAlternateViewFromString(msg.Body, new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Plain));
avPlain.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
msg.AlternateViews.Add(avPlain); 

【讨论】:

【参考方案10】:

尝试在消息前使用逐字运算符“@”:

message.Body = 
@"
line1
line 2
line 3
"

考虑到文本与左边距的距离也会影响到电子邮件正文左边距的实际距离..

【讨论】:

以上是关于MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法序列化 .Net MailMessage 对象

发送后显示带有降价的 Laravel 通知(MailMessage)

如何将 Retrofit POST 正文作为 JSON 字符串发送?

Laravel 5.3 将 html 添加到 MailMessage->line

将 System.Net.Mail.MailMessage 替换为手动创建的消息并发送

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘