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

问题描述:

我想用Java发送电子邮件,但是当我在Outlook中阅读电子邮件正文时,它已经摆脱了我所有的换行符。我将\ n放在行尾,但除此之外,还有什么特别的事情需要我去做?接收者总是会使用Outlook。如何在电子邮件中格式化字符串,以便Outlook将打印换行符?

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

感谢

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

+24

虽然这可能有助于在\ r \ n中简单地结束一行,但不能保证Outlook保持换行。 – GaussZ 2010-06-22 15:44:54

+0

如果消息是文本/纯文本使用,\ r \ n应该工作; – lwpro2 2013-04-09 04:05:13

+3

如果消息类型为text \ html,则使用

lwpro2 2013-04-09 04:05:28

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

\n很大程度上适用于我们,但Outlook有时会自动根据您的说法删除换行符。

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

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

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

例如,假设你要提供的信息独立的部分每个单独的一行,清晰,就像这样:

交易需要注意!
PostedDate:二零零九年一月三十零日
金额:$ 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窗口中预览文本,该窗口会将每行的末尾包装到下一行的第一个位置,与您的双空格缩进线对齐。这种策略已被用于一些newsletters
  3. 您可以放弃使用纯文本格式,并使用html格式。

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

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

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

+2

非凡的工作!同样在Outlook 2010. – 2013-04-26 08:53:51

+3

真的很好的答案。特别是在终点站前景的3个空格很好知道(而且在互联网上的许多地方没有找到)。 – Legolas 2013-05-15 15:23:20

+5

这是在打开Outlook时应自动显示为启动屏幕的答案。 – 2013-07-19 12:34:43

试试这个:

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

的问候,* 拉苏尔Javeed

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

解决了我的申请

在我的申请,我试图发送一封电子邮件,其消息体是由在文本区域的用户输入。邮件发送时,outlook会自动删除用户输入的换行符。

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

Outlook中显示它作为
YadavMahesh

分辨率:我换了换行字符 “\ r \ n” 和 “\看齐” (记得在RTF代码“\ par”的末尾点击空格),并且换行符被重新存储。

干杯,
马赫什

将一个时,您可以强制Outlook中的换行符(或两个?)只是换行(CRLF)之前制表符(\ t)。

例子:

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

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

我有试了一个很好的解决方案,它只是在如以下示例所示线的末尾添加CHAR(13):

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

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

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

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

我一直在努力满足上述所有解决方案,因为我在我的电子邮件库中使用了字符串变量(来自JTextPane的纯文本)和“text/html”格式的组合。

因此,解决这个问题的方法是使用“text/plain的”,而不是“text/html的”,没有必要在所有更换返回字符:

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

把文本<pre>标签并且Outlook将正确格式化并显示文本。

我定义它的CSS内嵌在HTML的身体像:

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:[email protected]?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()功能:

var formattedBody = "FirstLine \n Second Line \n Third Line"; 
var mailToLink = "mailto:[email protected]?body=" + encodeURIComponent(formattedBody); 

结果:

FirstLine 
SecondLine 
ThirdLine 

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

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

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

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

如果需要使用带有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>"; 
} 

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

\ r \ n在将身体类型设置为文本之前不会起作用。

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