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


76

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

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

谢谢

Answers:


29

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


25
尽管这可能仅有助于在\ r \ n中结束一行并不保证Outlook保持换行。
GaussZ 2010年

5
如果消息类型为text \ html,请使用<p />
lwpro2

对于text / html,我已经尝试了所有方法<br>,<br />,/ n,/ r / n...。仍然无法在我的Outlook电子邮件中找到新行
Noosphere

1
\ t \ n适用于Outlook2010。@Noosphere似乎您输入了错误的斜线。
男人编码

195

我今天一直在为此而斗争。我们将删除多余的换行符的行为称为“连续”。进行一些实验后发现以下行为:

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

请注意,我已使用Outlook 2007尝试了所有这一切。YMMV。
因此,如果可能的话,请在所有项目符号的末尾加上标点符号,制表符甚至三个空格。


5
真的很好的答案。尤其值得一提的是,在末尾有3个空格,这是事实(在互联网上的很多地方都找不到)。
莱戈拉斯

5
这是打开Outlook时应自动显示为启动屏幕的答案。
AndriusNaruševičius13年

2
为什么在任何地方都没有记录?这是非常有用的信息。感谢您的研究!
Bobson

4
为“以3个或更多空格结尾的行关闭连续性”的+1。这对我来说很有效,以确保Outlook为短行呈现新行。
Saille 2014年

你救了我一晚!非常感谢!
Vitalii Vitrenko

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自动清理我的换行符并弄乱我的电子邮件格式


非常感谢。根据您的提示,我使用“ \ t” + Environment.NewLine来开始每行。它至少适用于我正在使用的Outlook 2013。

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. 您可以提供2组,每组线之间的换行符。这的确阻止了Outlook将行合并到一行,但是随后在每行之间显示了一个额外的空白行(造成了相反的问题)。通过“提供两组换行符”,我的意思是应该使用“ \ r \ n \ r \ n”或“ \ r \ r”或“ \ n \ n”,但不能使用“ \ r \ n”或“ \ n” \ r“。
  2. 您可以在电子邮件正文的每一行的开头提供两个空格。这样可以避免在每行之间引入多余的空白行。但是,如果您的邮件中的每一行都比较短,这将是最好的选择,因为用户可能会在一个非常狭窄的Outlook窗口中预览文本,该窗口会将每一行的末尾环绕到下一行的第一位置,而不会与您的两个空格缩进的行对齐。此策略已用于一些新闻通讯
  3. 您可以放弃使用纯文本格式,而使用html格式。

采取了替代方案3,放弃了纯文本并使用html格式<br>
bob

10

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



4

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


2

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

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

结果:

FirstLine
SecondLine
ThirdLine

1

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


0

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


0

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


0

尝试\r\c代替\n

编辑:我认为@Robert Wilkinson是正确的。\r\n。内存已不再是过去。


0

\n很大程度上,这对我们有用,但是Outlook有时确实会自行删除行中断。


0

我也有纯文本/文本邮件类型的问题。之前,我使用“ \ n \ n”,但有两个换行符。然后,我使用了“ \ t \ n”,它起作用了。我StringBuffer在Java中使用追加内容。
内容已打印在Outlook 2010邮件的下一行中。


0

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

因此,解决此问题的方法是使用“文本/纯文本”而不​​是“文本/ html”,并且根本不需要替换返回字符:

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

0

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

也是从这里:stackoverflow.com/a/24666437/1134961 只需包裹在<pre> </ pre>标记中。
技术专家2015年

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;

0

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


0

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

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


0

除非您将主体类型设置为文本,否则\ r \ n将不起作用。

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

0

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

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

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

-1

在我的申请中解决

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

例如,如果用户输入了
Yadav
Mahesh

前景显示为
YadavMahesh

解决方法:我将换行符“ \ r \ n”更改为“ \ par”(请记住在RTF代码“ \ par”的末尾打空格),并且换行了。

干杯,
Mahesh




-1

如果消息是纯文本/使用,则\ r \ n应该有效;如果消息类型为text \ html,请使用< p/>


-1

如果需要对没有html编码的格式化文本进行处理。通过以下场景可以轻松实现,该场景可以动态创建div元素,并使用<pre></pre>html元素保持格式。

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

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

-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.