我正在尝试用 Java 发送一封电子邮件,但是当我在 Outlook 中阅读电子邮件的正文时,它消除了我所有的换行符。我将 \n 放在行尾,但除此之外我还需要做些什么特别的事情吗?接收方将始终使用 Outlook。
我在 microsoft.com 上发现了一个页面,上面说 Outlook 中有一个“删除换行符”“功能”,这是否意味着除了取消选中该设置之外没有其他解决方案可以解决这个问题?
谢谢
我正在尝试用 Java 发送一封电子邮件,但是当我在 Outlook 中阅读电子邮件的正文时,它消除了我所有的换行符。我将 \n 放在行尾,但除此之外我还需要做些什么特别的事情吗?接收方将始终使用 Outlook。
我在 microsoft.com 上发现了一个页面,上面说 Outlook 中有一个“删除换行符”“功能”,这是否意味着除了取消选中该设置之外没有其他解决方案可以解决这个问题?
谢谢
我今天一直在和这个作斗争。我们将删除多余换行符的行为称为“继续”。一点实验发现以下行为:
请注意,我在 Outlook 2007 中尝试了所有这些。YMMV。
因此,如果可能,所有项目符号项都以句终止标点符号、制表符甚至三个空格结束。
您需要\r\n
用作解决方案。
在换行符 (CRLF) 之前附加一个(或两个?)制表符 (\t) 时,您可以在 Outlook 中强制换行。
例子:
This is my heading in the mail\t\n
Just here Outlook is forced to begin a new line.
它似乎适用于 Outlook 2010。请测试这是否适用于其他版本。
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
似乎没有一个简单的解决方案。替代方案是:
我有同样的问题,并找到了解决方案。试试这个: %0D%0A
添加换行符。
我使用了 html 换行符而不是 "\n" 。它工作得很好。
在 Outlook 2010 上添加 "\t\r\n" (TAB 为 \t)而不是 "\r\n" 对我有用。注意:在每行末尾添加 3 个空格也可以做同样的事情,但这看起来像是编程技巧!
诀窍是使用encodeURIComponent()
js 的功能:
var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:x@y.com?body=" + encodeURIComponent(formattedBody);
结果:
FirstLine
SecondLine
ThirdLine
对于 Outlook 2010 及更高版本,请使用\t\n而不是 \r\n。
尝试\r\c
代替\n
.
编辑:我认为@Robert Wilkinson 是对的。\r\n
. 记忆不再像以前那样了。
这\n
在很大程度上对我们有用,但 Outlook 有时会自行删除您所说的换行符。
您需要发送 HTML 电子邮件。在电子邮件中使用<br />
s,您将始终有换行符。
如果您可以添加“。” 每行末尾的(点)字符,这似乎可以防止 Outlook 破坏文本格式。
我也遇到了纯/文本邮件类型的问题。早些时候,我使用了“\n\n”,但有两个换行符。然后,我使用了 "\t\n" 并且它起作用了。我StringBuffer
在java中使用来附加内容。
内容打印在 Outlook 2010 邮件的下一行。
我一直在为上述所有解决方案苦苦挣扎,但在这里没有任何帮助,因为我在我的电子邮件库中使用了字符串变量(来自 JTextPane 的纯文本)和“text/html”格式。
所以,这个问题的解决方案是使用“text/plain”,而不是“text/html”,根本不需要替换返回字符:
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");
将文本放入<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>
因为它是一个查询,所以只有百分比转义字符有效,这意味着 %0A 给你一个换行符。例如,
<a href="mailto:someone@gmail.com?Subject=TEST&amp;body=Hi there,%0A%0AHow are you?%0A%0AThanks">email to me</a>
我也遇到了纯/文本邮件类型的问题。Form Feed \f
对我有用。
有时您必须输入 \r\n 两次才能强制 Outlook 中断。
这将添加一个空行,但所有行都会中断。
\r\n在您将正文类型设置为文本之前将不起作用。
message.setBody(MessageBody.getMessageBodyFromText(msg));
BodyType type = BodyType.Text;
message.getBody().setBodyType(type);
我遇到了同样的问题,这是解决它的代码:
\t\n - for new line in Email service JavaMailSender
String mailMessage = JSONObject.toJSONString("Your message").replace(",", "\t\n").trim();
试试这个:
message.setContent(new String(body.getBytes(), "iso-8859-1"),
"text/html; charset=\"iso-8859-1\"");
问候, Mohammad Rasool Javeed
在我的申请中解决
在我的应用程序中,我试图发送一封电子邮件,其邮件正文由用户在文本区域中键入。发送邮件时,outlook 会自动删除用户输入的换行符。
例如,如果用户输入
Yadav
Mahesh
Outlook 将其显示为
YadavMahesh
解决方案:我将换行符“\r\n”更改为“\par”(记得在 RTF 代码“\par”的末尾打空格)并恢复换行符。
干杯,
马赫什
我有一个很好的解决方案,我尝试过,它只是在行尾添加 Char(13),如下例所示:
Dim S As String
S = "Some Text" & Chr(13)
S = S + "Some Text" & Chr(13)
如果消息是文本/普通使用,\r\n 应该可以工作;如果消息类型是 text\html,请使用< p/>
如果需要使用没有 html 编码的格式化文本来完成工作。它可以通过以下场景轻松实现,即动态创建 div 元素并使用<pre></pre>
html 元素保持格式。
var email_body = htmlEncode($("#Body").val());
function htmlEncode(value) {
return "<pre>" + $('<div/>').text(value).html() + "</pre>";
}
不确定上面是否提到过,但 Outlook 有一个名为“删除纯文本消息中的额外换行符”的复选框设置,默认情况下处于选中状态。对于不同版本的 Outlook,它位于不同的位置,但对于 2010,请转到“文件”选项卡。选择“选项 => 邮件” 向下滚动到“邮件格式” 取消选中该复选框。