Outlook自动清理我的换行符,并搞砸了我的电子邮件格式

我使用dotnet框架发送电子邮件。 这里是我用来创build消息的模板:

Date of Hire: %HireDate% Annual Salary: %AnnualIncome% Reason for Request: %ReasonForRequest% Name of Voluntary Employee: %FirstName% %LastName% Total Coverage Applied For: %EECoverageAmount% Guaranteed Coverage Portion: %GICoveragePortion% Amount Subject to Medical Evident: %GIOverage% 

当Outlook收到邮件时,Outlook会告诉我:“此邮件中的额外换行符被删除”。 消息显示如下:

 Date of Hire: 9/28/2001 Annual Salary: $100,000 Reason for Request: New Hire Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For: $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000 

请注意如何Outlook错误地删除名称后,EECoverageAmount等所需的换行符…

电子邮件收件人必须获得格式正确的电子邮件,而且我必须假定其中一些使用的是Outlook 2003.我也不能认为他们知道足以closuresautocleanfunction以使邮件格式正确。

我已经在其他邮件客户端查看这些邮件,并显示正确

一些更多的信息:

  • 我正在使用UTF-8 BodyEncoding(msg.BodyEncoding = System.Text.Encoding.UTF8)
  • 正在从UTF-8编码的文本文件中读取msg.Body,并且每行都以crlf结尾。

问题:如何更改消息的格式以避免此问题?

开始每行2个空格,Outlook将被“欺骗”保持格式。

所以改变

 Date of Hire: %HireDate% Annual Salary: %AnnualIncome% Reason for Request: %ReasonForRequest% Name of Voluntary Employee: %FirstName% %LastName% Total Coverage Applied For: %EECoverageAmount% Guaranteed Coverage Portion: %GICoveragePortion% Amount Subject to Medical Evident: %GIOverage% 

  Date of Hire: %HireDate% Annual Salary: %AnnualIncome% Reason for Request: %ReasonForRequest% Name of Voluntary Employee: %FirstName% %LastName% Total Coverage Applied For: %EECoverageAmount% Guaranteed Coverage Portion: %GICoveragePortion% Amount Subject to Medical Evident: %GIOverage% ^^ <--- Two extra spaces at the start of every line 

这是我在研究这个问题时发现的文章 ,比我的回答更深入。

您也可以在行 (在CR LF之前)插入制表符。 这个额外的空白将在行的末尾,因此对用户不可见。 你可能更喜欢这个不得不在左边插入空格。 请注意,一个空间是不够的(虽然也许多个空间将帮助,我不知道。)

这个答案是关于如何从Outlook客户端“禁用”function。

  • 转到工具 – >“选项…”
  • 在“首选项”标签中点击“电子邮件选项…”
  • 取消选中“删除纯文本消息中的多余换行符”框。
  • 点击确定

仅供参考:我正在使用Outlook 2007

我一直有更好的运气格式化电子邮件为HTML。 您可能仍然有最终用户的问题不得不设置客户端,以允许HTML格式,但他们通常更熟悉这一点,因为这么多的电子邮件做html格式。 在添加html标签的过程中,您还需要做更多的工作,但最终的结果是可控的。

@ephemient也build议: 发送HTML和明文。 良好的客户将展示后者,outlook将展现前者,每个人都高兴(除了程序员必须做更多的工作)。

扩展Doug L的答案,因为我认为HTML的消息传递现在比2008年的时候更加无处不在,并且接受了这个答案。 这是一个小小的c#代码片段,帮助转换正文并以HTML格式发送邮件:

 body = string.Format("<font face='calibri,arial,sans-serif'>{0}<font/>", body.Replace("\r\n", "<br>")); using (var smtpClient = new SmtpClient() { Host = smtpHost }) using (var msg = new MailMessage(from, emailDistribution, subject, body) { IsBodyHtml = true }) smtpClient.Send(msg); 

在生成纯文本电子邮件并在Outlook 2003 SP3中阅读时遇到同样的问题。 看来你可以通过保持行长不超过40个字符来避免它的删除过程。 可能并不总是实际的。

将文本放在<pre>标签和Outlook中将正确格式化并显示文本。

我定义了它在HTML体内的CSS内容,如:

CSS:

 pre { font-family: Verdana, Geneva, sans-serif; } 

我定义的字体家族必须设置字体。

HTML:

 <td width="70%"><pre>Entry Date/Time: 2013-09-19 17:06:25 Entered By: Chris worklog mania ____________________________________________________________________________________________________ Entry Date/Time: 2013-09-19 17:05:42 Entered By: Chris this is a new Worklog Entry</pre></td> 

在Outlook 2010中为我添加“\ t \ r \ n”(\ t代表TAB)而不是“\ r \ n”。

我的文本包含“\ r \ n”,但Outlook 2010不会显示换行符。 创build由\ r \ n分隔的行的标记和HTML段落标记的包络标记。 我的电子邮件格式是HTML。 我在下面的代码中为我的电子邮件生成HTML Body。

 string[] tokens = Regex.Split(objTickt.Description, "\r\n"); if (tokens.Length > 0) { foreach (string line in tokens) { //htmlTW.WriteEncodedText(objTickt.Description.Replace("\r\n", "\n\n")); htmlTW.RenderBeginTag(HtmlTextWriterTag.P); htmlTW.WriteEncodedText(line); htmlTW.RenderEndTag(); } } 

将您的行终止从crlf更改为cr或lf。

我怀疑电子邮件的顶部只使用cr(或者lf),Outlook希望电子邮件的其余部分遵循相同的格式。