Outlook 会自动清理我的邮箱地址,搞乱我的邮件格式

我正在使用 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.Encode. UTF8)
  • 正在从一个 UTF-8编码的文本文件读取 msg.Body,每一行都以一个 crlf 结束。

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

68937 次浏览

将线路终止从 crf 更改为 cr 或 lf。

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

将电子邮件格式化为 html 格式总是比较幸运。您可能仍然存在必须将客户端设置为允许 html 格式的最终用户问题,但是他们通常更熟悉这个问题,因为许多电子邮件都是采用 html 格式的。您在添加 html 标记方面还有一些工作要做,但是最终的结果更容易控制。

@ ephemient 也建议: 同时以 HTML 和明文形式发送。好的客户端会显示后者,Outlook 会显示前者,每个人都很高兴(除了那些需要做更多工作的程序员)。

开始每一行与2个空格和展望将“欺骗”,以保持您的格式。

那就改变

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

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

我看到同样的问题时,生成一个纯文本电子邮件,然后阅读它与 Outlook2003SP3。看起来你可以通过将行长保持在40个字符以下来避免删除过程。也许并不总是实用。

您还可以在该行的 结束处(恰好在 CR LF 之前)插入制表符。这个额外的空白将出现在行的末尾,因此用户不可见。与必须在左侧插入空格相比,您可能更喜欢这样做。请注意,单个空格是不够的(尽管多个空格可能会有所帮助,我不知道)

这个问题的答案是关于如何从 Outlook 客户端“禁用”这个特性。

  • 转到工具-> “选项...”
  • 在“首选项”选项卡上点击“电子邮件选项...”
  • 取消选中“删除纯文本消息中的额外换行符”框
  • 按 OK 键

仅供参考: 我正在使用 Outlook2007

把文本在 <pre>标签和展望将格式和显示的文本正确。

我用 CSS 在 HTML 主体中内联定义了它,比如:

CSS:

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

我定义了 font-family to have to font set。

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>

我的文本包括’r n’,但 Outlook2010不呈现换行符。创建由“ r n”分隔的行标记和由 HTML 段落标记分隔的信封标记。我的电子邮件格式是 HTML。我在下面的代码中为我的电子邮件生成 HTML 正文。

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();
}
}

在 Outlook2010中,添加“ t r n”(t 表示 TAB)而不是“ r n”对我来说很有用。

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

自动清洗是一个外观功能,可以消除额外的断线。您可以通过两种方式防止它。

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

  • 第二种方法是改变前景设置,这将阻止前景 消除额外的断行

enter image description here

enter image description here