You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaMail API:如何在HTML邮件中保留内容换行格式

解决JavaMail HTML邮件换行丢失的问题

首先,我注意到你的代码里有一个明显的HTML结构错误——你最后拼接的是"/<div>",这应该是"</div>"才对!标签闭合错误会导致浏览器无法正确识别你的样式规则,这也是white-space: pre-wrap没生效的关键原因之一。

接下来,咱们一步步解决格式保留的问题:

1. 修复HTML结构错误

先把你的createEmailContent方法里的闭合标签改对:

private static String createEmailContent(String descp) {
    StringBuilder sb = new StringBuilder("<style> div { white-space: pre-wrap;}</style><div>");
    sb.append(descp);
    sb.append("</div>"); // 这里把"/<div>"改成"</div>"
    return sb.toString();
}

2. 正确处理换行符

HTML默认会忽略文本中的\r\n和多余空格,即使设置了pre-wrap,有时候也需要确保换行符被浏览器正确识别。你有两个可选方案:

方案A:将\r\n转换为HTML换行标签<br>

直接把原字符串中的换行符替换成HTML的换行元素,这样不管样式如何,换行都会生效:

private static String createEmailContent(String descp) {
    // 先替换换行符
    String formattedDescp = descp.replaceAll("\r\n", "<br>");
    StringBuilder sb = new StringBuilder("<style> div { white-space: pre-wrap;}</style><div>");
    sb.append(formattedDescp);
    sb.append("</div>");
    return sb.toString();
}

方案B:确保pre-wrap样式生效并保留原始换行

如果你想完全保留原始的空格和换行格式,除了修复标签闭合,还可以把div换成<pre>标签(或者给div加上pre的特性),同时注意转义HTML特殊字符(比如<、>、&等,避免破坏HTML结构):

private static String createEmailContent(String descp) {
    // 转义HTML特殊字符
    String escapedDescp = org.apache.commons.text.StringEscapeUtils.escapeHtml4(descp);
    StringBuilder sb = new StringBuilder("<style> pre { white-space: pre-wrap;}</style><pre>");
    sb.append(escapedDescp);
    sb.append("</pre>");
    return sb.toString();
}

(如果没有Apache Commons库,也可以自己实现简单的字符转义,比如替换&为&amp;,<为&lt;等)

3. 验证邮件内容类型

确保你确实把邮件的内容类型设置为text/html; charset=utf-8,比如:

message.setContent(createEmailContent(descp), "text/html; charset=utf-8");

这样处理后,收件人收到的邮件就会和你原输入的格式完全一致了。

内容的提问来源于stack exchange,提问作者roger_that

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:42:12