如何格式化电子邮件中的字符串以便Outlook打印换行符?

时间:2008-09-25 20:58:25

标签: java email outlook newline line-breaks

我正在尝试用Java发送电子邮件,但当我在Outlook中阅读电子邮件的正文时,它已经摆脱了我的所有换行符。我把\ n放在了行的末尾但除了那之外我还需要做些什么吗?接收器总是使用Outlook。

我在microsoft.com上发现一个页面,其中显示Outlook中有一个“删除换行符”“功能”,这是否意味着除了取消检查该设置之外没有解决方法?

由于

28 个答案:

答案 0 :(得分:177)

我今天刚刚和这个人打架。让我们调用删除额外换行符“延续”的行为。一个小小的实验发现了以下行为:

  • 每条消息都以延续关闭开始。
  • 长度小于40个字符的行不会触发延续,但如果继续处于启用状态,则会删除它们的换行符。
  • 40个字符或更长的行会打开延续。它会一直亮着,直到发生事件才能将其关闭。
  • 以句号,问号,感叹号或冒号结束的行结束。 (Outlook认为这是一个句子的结尾?)
  • 关闭延续的行将以换行符开始,但如果长度超过40个字符,则会重新开启。
  • 以标签开头或结尾的行会关闭延续。
  • 以2个或更多空格开头的行会关闭延续。
  • 以3个或更多空格结尾的行会关闭延续。

请注意,我使用Outlook 2007尝试了所有这些.YMMV。
因此,如果可能,请使用句子终止标点符号,制表符或甚至三个空格来结束所有项目符号。

答案 1 :(得分:26)

在换行符(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 autocleaning my line breaks and screwing up my email format

答案 2 :(得分:25)

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

答案 3 :(得分:23)

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

如果您尝试编写的代码会自动生成要由使用Outlook的人阅读的电子邮件,则可能会出现问题。

例如,假设您希望在单独的行中提供单独的信息,以便清晰起见,如下所示:

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

您的Outlook收件人会看到所有信息都被粉碎在一起,如下所示:

交易需要注意! PostedDate:1/30/2009金额:$ 12,222.06 TransID:8gk288g229g2kg89 ZipCode:91543

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

  1. 您可以在每行之间提供两个换行符。这确实会阻止Outlook将行组合到一行上,但它会在每行之间显示一个额外的空行(产生相反的问题)。通过“提供两组换行符”我的意思是你应该使用“\ r \ n \ r \ n”或“\ r \ n”或“\ n \ n”而不是“\ r \ n”或“\ n” \ R”。
  2. 您可以在电子邮件正文的每一行的开头提供两个空格。这避免了在每一行之间引入额外的空白行。但是如果你的消息中的每一行都相当短,那么这种方法效果最好,因为用户可能正在一个非常狭窄的Outlook窗口中预览文本,该窗口将每行的末尾包裹到下一行的第一个位置,在那里它不会与你的两个空格缩进的行对齐。此策略已用于某些newsletters
  3. 您可以放弃使用纯文本格式,并使用html格式。

答案 4 :(得分:11)

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

答案 5 :(得分:3)

我使用了html换行符而不是" \ n" 。它运作良好。

答案 6 :(得分:2)

添加“\ t \ r \ n”(\ t为TAB)而不是“\ r \ n”在Outlook 2010上为我工作。注意:在每行的末尾添加3个空格也会做同样的事情,但这看起来像编程黑客!

答案 7 :(得分:1)

您需要发送HTML电子邮件。通过电子邮件中的<br />,您将始终拥有换行符。

答案 8 :(得分:1)

在将正文类型设置为文本之前,

\ r \ n 将无效。

message.setBody(MessageBody.getMessageBodyFromText(msg));
BodyType type = BodyType.Text;
message.getBody().setBodyType(type);

答案 9 :(得分:1)

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

答案 10 :(得分:1)

诀窍是使用js:{/ p>中的encodeURIComponent()功能

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

结果:

FirstLine
SecondLine
ThirdLine

答案 11 :(得分:1)

我一直在努力解决上述所有解决方案而且没有任何帮助,因为我使用了一个String变量(来自JTextPane的纯文本)和&#34; text / html&#34;在我的电子邮件库中格式化。

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

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");

答案 12 :(得分:1)

将文本放在<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>

答案 13 :(得分:1)

因为它是一个查询,只有百分比转义字符有效,意味着%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;

答案 14 :(得分:0)

尝试使用\r\c代替\n

编辑:我认为@Robert Wilkinson说得对。 \r\n。记忆不像以前那样。

答案 15 :(得分:0)

我遇到了同样的问题,下面是解决该问题的代码:

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

String mailMessage = JSONObject.toJSONString("Your message").replace(",", "\t\n").trim();

答案 16 :(得分:0)

如果需要使用带有html编码的格式化文本来完成工作。 使用creates div element on the fly以及使用<pre></pre> html元素保持格式化的以下方案可以轻松实现。

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

 function htmlEncode(value) {
    return "<pre>" + $('<div/>').text(value).html() + "</pre>";
}

答案 17 :(得分:0)

有时您必须输入两次\ r \ n才能强制Outlook进行休息。

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

答案 18 :(得分:0)

我也有普通/文本邮件类型的问题.Form Feed \f为我工作。

答案 19 :(得分:0)

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

答案 20 :(得分:0)

This对您有所帮助。尝试“%0A”而不是“\ n”。真正的来源是here.

您需要在代码中需要新行的位置添加“%0A”。在你的情况下

 abcParameters.put(defConstants.REPORT_MESSAGE, "Invalid file sent by tt. Hence ffgghh  was unable
              to process it : " + s+ "%0A" +e.getMessage().toString());

答案 21 :(得分:0)

如果消息是text / plain使用,\ r \ n应该工作; 如果消息类型是text \ html,请使用< p/>

答案 22 :(得分:0)

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

Dim S As String
 S = "Some Text" & Chr(13)
 S = S + "Some Text" & Chr(13)

答案 23 :(得分:0)

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

答案 24 :(得分:0)

已解决我的申请

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

例如,如果用户输入了 亚达夫
马赫什

展望将其显示为
YadavMahesh

分辨率:我用“\ par”更改了换行符“\ r \ n”(记得在RTF代码“\ par”的末尾点击空格)并重新换行换行符

干杯,
马赫什

答案 25 :(得分:0)

试试这个:

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

此致 Mohammad Rasool Javeed

答案 26 :(得分:0)

\n在很大程度上适用于我们,但Outlook有时会自行删除换行符。

答案 27 :(得分:-1)

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