如何在电子邮件中格式化string,以便Outlook将打印换行符?

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

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

谢谢

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

我今天刚刚与这个战斗。 我们称之为删除额外换行符“延续”的行为。 一点点实验发现以下行为:

  • 每条消息以延续开始。
  • 长度小于40个字符的行不会触发延续,但如果继续打开,则会删除其换行符。
  • 行40个字符或更长的继续打开。 它一直持续到事件发生时closures。
  • 以句号,问号,感叹号或冒号结束的行将closures。 (outlook假设这是句子的结尾?)
  • 连续closures的行将以换行符开始,但如果它们的长度超过40个字符,则将继续打开。
  • 以制表符开始或结束的行将closures。
  • 以2个或更多空格开始的行将closures。
  • 以3个或更多空格结束的行将closures。

请注意,我在Outlook 2007中尝试了这一切。YMMV。
所以,如果可能的话,结束所有的项目符号,终止标点符号,标签,甚至三个空格。

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

例:

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

它似乎在Outlook 2010上工作。请testing这是否适用于其他版本。

另请参阅Outlook autocleaning我的换行符和搞砸我的电子邮件格式

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

这可能会导致问题,如果你正在尝试编写代码,将自动生成一个电子邮件消息,由某人使用Outlook阅读。

例如,为了清晰起见,假设您要在不同的行上分别提供不同的信息,如下所示:

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

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

交易需要注意! 发布date:1/30/2009金额:$ 12,222.06 TransID:8gk288g229g2kg89邮政编码:91543

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

  1. 您可以在每行之间提供两组换行符。 这确实会阻止Outlook将行组合到一行上,但会在每行之间显示一个额外的空白行(创build相反的问题)。 “提供两组换行符”是指你应该使用“\ r \ n \ r \ n”或“\ r \ r”或“\ n \ n”而不是“\ r \ n”或“\ n \ r”。
  2. 您可以在电子邮件正文的每一行的开头提供两个空格。 这样可以避免在每行之间引入额外的空白行。 但是,如果消息中的每一行相当短,则这种效果最好,因为用户可能在非常窄的Outlook窗口中预览文本,该窗口将每行的末尾包装到下一行的第一个位置,排列你的两个空格缩进行。 这个策略已被用于一些通讯 。
  3. 您可以放弃使用纯文本格式,并使用html格式。

我有同样的问题,并find了解决办法。 试试这个: %0D%0A来添加一个换行符。

您需要发送HTML电子邮件。 <br />在电子邮件中,您将始终有您的线路中断。

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

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

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

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

因为这是一个查询,只有百分号转义字符的工作,意味着%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; 

我已经使用了html换行而不是“\ n”。 它工作正常。

诀窍是使用js的encodeURIComponent()function:

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

结果:

 FirstLine SecondLine ThirdLine 

解决我的申请

在我的应用程序中,我试图发送邮件,邮件正文由用户在文本区域中input。 邮件发送时,outlook会自动删除用户input的换行符。

例如,如果用户input
亚达夫
马赫什

outlook将其显示为
YadavMahesh

解决scheme:我用“\ par”改变了换行符“\ r \ n”(记得在RTF代码“\ par”的末尾点击空格),换行符被换行。

干杯,
马赫什

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

尝试这个:

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

问候,穆罕默德Rasool Javeed

尝试\r\c而不是\n

编辑:我认为@罗伯特·威尔金森是正确的。 \r\n 。 记忆力不是以前的样子。

\n很大程度上是为我们工作的,但是Outlook有时会像你说的那样把它自己去除。

我有一个很好的解决scheme,我试了一下,它只是像在下面的例子中添加行末的Char(13):

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

如果消息是文本/纯文本使用,\ r \ n应该工作; 如果消息types是text \ html,则使用< p/>

这一定对你有帮助 尝试“%0A”而不是“\ n”。 真正的来源在这里。

你需要添加“%0A”,你需要在代码中添加一行。 在你的情况

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

我也有这个问题与纯文本/文本邮件types。 早些时候,我使用“\ n \ n”,但有两个换行符。 然后,我用“\ t \ n”,它的工作。 我在Java中使用StringBuffer来追加内容。
内容打印在Outlook 2010邮件的下一行中。

我也有这个问题与纯文本/文本邮件types.Form Feed \f为我工作。

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

有时你必须两次input,才能强制Outlook进行中断。

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

如果需要使用带有HTML编码的格式化文本来完成工作。 可以很容易地实现下面的场景, 即时创builddiv元素并使用<pre></pre> html元素来保持格式化。

 var email_body = htmlEncode($("#Body").val()); function htmlEncode(value) { return "<pre>" + $('<div/>').text(value).html() + "</pre>"; } 

在Outlook 2010中为我添加“\ t \ r \ n”(\ t代表TAB)而不是“\ r \ n”。 注意:在每行的末尾添加3个空格也是一样的,但是看起来像是一个编程的黑客!

只有将身体types设置为文字, \ r \ n才会起作用。

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