78

我正在尝试用 Java 发送一封电子邮件,但是当我在 Outlook 中阅读电子邮件的正文时,它消除了我所有的换行符。我将 \n 放在行尾,但除此之外我还需要做些什么特别的事情吗?接收方将始终使用 Outlook。

我在 microsoft.com 上发现了一个页面,上面说 Outlook 中有一个“删除换行符”“功能”,这是否意味着除了取消选中该设置之外没有其他解决方案可以解决这个问题?

谢谢

4

27 回答 27

203

我今天一直在和这个作斗争。我们将删除多余换行符的行为称为“继续”。一点实验发现以下行为:

  • 每条消息都以继续关闭开始。
  • 长度少于 40 个字符的行不会触发继续,但如果打开了继续,它们的换行符将被删除。
  • 行 40 个字符或更长的行打开继续。它保持打开状态,直到发生事件以将其关闭。
  • 以句点、问号、感叹号或冒号结尾的行会关闭续行。(Outlook 假设它是一个句子的结尾?)
  • 关闭续行的行将以换行符开始,但如果它们超过 40 个字符,则会重新打开续行。
  • 以制表符开头或结尾的行将关闭续行。
  • 以 2 个或更多空格开头的行将关闭延续。
  • 以 3 个或更多空格结尾的行将关闭延续。

请注意,我在 Outlook 2007 中尝试了所有这些。YMMV。
因此,如果可能,所有项目符号项都以句终止标点符号、制表符甚至三个空格结束。

于 2009-10-28T16:59:45.980 回答
30

您需要\r\n用作解决方案。

于 2008-09-25T21:01:54.647 回答
29

在换行符 (CRLF) 之前附加一个(或两个?)制表符 (\t) 时,您可以在 Outlook 中强制换行。

例子:

This is my heading in the mail\t\n
Just here Outlook is forced to begin a new line.

它似乎适用于 Outlook 2010。请测试这是否适用于其他版本。

另请参阅Outlook 自动清理我的换行符并搞砸我的电子邮件格式

于 2011-02-17T08:54:35.600 回答
24

Microsoft Outlook 2002 及更高版本默认从文本消息中删除“额外的换行符” (kb308319)。也就是说,Outlook 似乎只是忽略了文本消息中的换行和/或回车序列,将所有行放在一起。

如果您尝试编写将自动生成电子邮件以供使用 Outlook 的人阅读的代码,这可能会导致问题。

例如,为了清楚起见,假设您想在单独的行中提供单独的信息,如下所示:

交易需注意!
发布日期:1/30/2009
金额:12,222.06 美元
TransID:8gk288g229g2kg89 邮政编码
:91543

您的 Outlook 收件人将看到所有信息拼凑在一起,如下所示:

交易需注意!发布日期:1/30/2009 金额:12,222.06 美元 TransID:8gk288g229g2kg89 邮政编码:91543

似乎没有一个简单的解决方案。替代方案是:

  1. 您可以在每行之间提供两组换行符。这确实会阻止 Outlook 将这些行合并到一行,但它会在每行之间显示一个额外的空白行(产生相反的问题)。“提供两组换行符”是指您应该使用“\r\n\r\n”或“\r\r”或“\n\n”,而不是“\r\n”或“\n \r”。
  2. 您可以在电子邮件正文的每行开头提供两个空格。这样可以避免在每行之间引入额外的空白行。但是,如果您的消息中的每一行都相当短,则此方法效果最好,因为用户可能正在一个非常窄的 Outlook 窗口中预览文本,该窗口将每行的末尾环绕到下一行的第一个位置,而不会与您的两个空格缩进的行对齐。这种策略已被用于一些时事通讯
  3. 您可以放弃使用纯文本格式,而使用 html 格式。
于 2009-01-30T23:29:22.373 回答
10

我有同样的问题,并找到了解决方案。试试这个: %0D%0A添加换行符。

于 2010-12-14T13:35:58.827 回答
6

我使用了 html 换行符而不是 "\n" 。它工作得很好。

于 2014-09-21T04:49:49.253 回答
4

在 Outlook 2010 上添加 "\t\r\n" (TAB 为 \t)而不是 "\r\n" 对我有用。注意:在每行末尾添加 3 个空格也可以做同样的事情,但这看起来像是编程技巧!

于 2016-04-12T15:03:59.223 回答
2

诀窍是使用encodeURIComponent()js 的功能:

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:x@y.com?body=" + encodeURIComponent(formattedBody);

结果:

FirstLine
SecondLine
ThirdLine
于 2014-09-26T15:28:04.493 回答
1

对于 Outlook 2010 及更高版本,请使用\t\n而不是 \r\n。

于 2015-06-02T03:20:58.670 回答
0

尝试\r\c代替\n.

编辑:我认为@Robert Wilkinson 是对的。\r\n. 记忆不再像以前那样了。

于 2008-09-25T20:59:03.497 回答
0

\n在很大程度上对我们有用,但 Outlook 有时会自行删除您所说的换行符。

于 2008-09-25T21:03:03.333 回答
0

您需要发送 HTML 电子邮件。在电子邮件中使用<br />s,您将始终有换行符。

于 2008-09-25T21:15:03.867 回答
0

如果您可以添加“。” 每行末尾的(点)字符,这似乎可以防止 Outlook 破坏文本格式。

于 2011-05-17T09:22:14.447 回答
0

我也遇到了纯/文本邮件类型的问题。早些时候,我使用了“\n\n”,但有两个换行符。然后,我使用了 "\t\n" 并且它起作用了。我StringBuffer在java中使用来附加内容。
内容打印在 Outlook 2010 邮件的下一行。

于 2013-08-26T20:09:52.453 回答
0

我一直在为上述所有解决方案苦苦挣扎,但在这里没有任何帮助,因为我在我的电子邮件库中使用了字符串变量(来自 JTextPane 的纯文本)和“text/html”格式。

所以,这个问题的解决方案是使用“text/plain”,而不是“text/html”,根本不需要替换返回字符:

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");
于 2013-09-22T15:12:05.900 回答
0

将文本放入<pre>标签中,outlook 将正确格式化和显示文本。

我在 HTML Body 的 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>
于 2013-09-24T15:48:36.267 回答
0

因为它是一个查询,所以只有百分比转义字符有效,这意味着 %0A 给你一个换行符。例如,

&lt;a href=&quot;mailto:someone@gmail.com?Subject=TEST&amp;amp;body=Hi there,%0A%0AHow are you?%0A%0AThanks&quot;&gt;email to me&lt;/a&gt;
于 2013-10-26T13:06:52.353 回答
0

我也遇到了纯/文本邮件类型的问题。Form Feed \f对我有用。

于 2014-11-13T16:50:54.097 回答
0

有时您必须输入 \r\n 两次才能强制 Outlook 中断。

这将添加一个空行,但所有行都会中断。

于 2015-09-15T17:56:29.963 回答
0

\r\n在您将正文类型设置为文本之前将不起作用。

message.setBody(MessageBody.getMessageBodyFromText(msg));
BodyType type = BodyType.Text;
message.getBody().setBodyType(type);
于 2016-12-26T11:35:36.340 回答
0

我遇到了同样的问题,这是解决它的代码:

\t\n - for new line in Email service JavaMailSender

String mailMessage = JSONObject.toJSONString("Your message").replace(",", "\t\n").trim();
于 2020-06-11T16:47:11.390 回答
-1

试试这个:

message.setContent(new String(body.getBytes(), "iso-8859-1"),
                    "text/html; charset=\"iso-8859-1\"");

问候, Mohammad Rasool Javeed

于 2009-12-01T11:57:25.343 回答
-1

在我的申请中解决

在我的应用程序中,我试图发送一封电子邮件,其邮件正文由用户在文本区域中键入。发送邮件时,outlook 会自动删除用户输入的换行符。

例如,如果用户输入
Yadav
Mahesh

Outlook 将其显示为
YadavMahesh

解决方案:我将换行符“\r\n”更改为“\par”(记得在 RTF 代码“\par”的末尾打空格)并恢复换行符。

干杯,
马赫什

于 2010-12-30T06:41:40.457 回答
-1

我有一个很好的解决方案,我尝试过,它只是在行尾添加 Char(13),如下例所示:

Dim S As String
 S = "Some Text" & Chr(13)
 S = S + "Some Text" & Chr(13)
于 2012-04-30T11:19:45.657 回答
-1

如果消息是文本/普通使用,\r\n 应该可以工作;如果消息类型是 text\html,请使用< p/>

于 2013-04-09T04:05:49.363 回答
-1

如果需要使用没有 html 编码的格式化文本来完成工作。它可以通过以下场景轻松实现,即动态创建 div 元素并使用<pre></pre>html 元素保持格式。

var email_body = htmlEncode($("#Body").val());

 function htmlEncode(value) {
    return "<pre>" + $('<div/>').text(value).html() + "</pre>";
}
于 2015-10-22T13:29:06.623 回答
-1

不确定上面是否提到过,但 Outlook 有一个名为“删除纯文本消息中的额外换行符”的复选框设置,默认情况下处于选中状态。对于不同版本的 Outlook,它位于不同的位置,但对于 2010,请转到“文件”选项卡。选择“选项 => 邮件” 向下滚动到“邮件格式” 取消选中该复选框。

于 2018-06-25T20:10:32.090 回答