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

时间:2008-10-29 16:48:26

标签: .net utf-8 outlook smtp

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

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.我也不能假设他们知道足以关闭autoclean功能以获取格式化消息正常。

我在其他邮件客户端中查看了这些邮件并正确显示

更多信息:

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

问题: 如何更改邮件格式以避免此问题?

11 个答案:

答案 0 :(得分:122)

您还可以在该行的 end 处插入一个制表符(就在CR LF之前)。这个额外的空白区域将位于该行的末尾,因此对用户不可见。您可能更喜欢这个必须在左侧插入空格。请注意,单个空间是不够的(尽管可能有多个空格会有所帮助,我不知道。)

答案 1 :(得分:92)

以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

以下是我在研究这个问题时发现的article,它比我的答案更深入。

答案 2 :(得分:27)

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

  • 转到工具 - &gt; “选项......”
  • 在“首选项”标签中,点击“电子邮件选项...”
  • 取消选中“删除纯文本邮件中的额外换行符”框。
  • 点击确定

仅供参考:我使用的是Outlook 2007

答案 3 :(得分:4)

我总是把运气格式化为html。您可能仍然有最终用户问题,必须将客户端设置为允许html格式,但他们通常更熟悉这个,因为很多电子邮件都是html格式化的。您还可以在最后添加html标签,但最终结果更加可控。

@ephemient还建议:同时发送HTML和纯文本。好的客户会展示后者,Outlook会展示前者,每个人都很高兴(除了需要做更多工作的程序员)。

答案 4 :(得分:2)

添加&#34; \ t \ r \ n&#34; (\ t表示TAB)代替&#34; \ r \ n&#34;在Outlook 2010上为我工作。

答案 5 :(得分:1)

扩展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);

答案 6 :(得分:0)

我在生成纯文本电子邮件然后使用Outlook 2003 SP3阅读时遇到了同样的问题。看起来您可以通过将行长度保持在40个字符以下来避免删除过程。可能并不总是实用。

答案 7 :(得分:0)

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

我在HTML Body in CSS Body中定义它:

CSS:

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

我将font-family定义为必须设置字体。

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>

答案 8 :(得分:0)

自动清洁是一种外观功能,可以消除多余的换行符。您可以通过两种方式防止它发生。

  • 第一种方法是在通过代码发送电子邮件时,在行前至少添加2个额外的空格。您只能在Outlook自动删除的行之前添加这些额外的空格。

  • 第二种方法是更改Outlook设置,这将阻止Outlook 删除多余的换行符。

enter image description here

enter image description here

答案 9 :(得分:-1)

我的文字包括&#39; \ r \ n&#39;但Outlook 2010不会呈现换行符。创建由&#39; \ r \ n&#39;分隔的行标记。 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();
     }
  }

答案 10 :(得分:-6)

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

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