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

如何使用StringBuilder拼接HTML作为正文完成发送

使用StringBuilder构造HTML正文的正确实现方式

原代码存在的核心问题

  • 语法错误:拼接逻辑中混入了无关的图片占位符[enter image description here][1],且a标签闭合符</a>被写在了append()方法括号外,代码无法通过编译
  • 逻辑隐患:URL中的动态参数未做URL编码,若参数值包含&、空格、中文等特殊字符,会导致链接参数解析错位,激活链接失效
  • 兼容性问题:直接拼接HTML片段未声明文档编码,作为邮件/消息正文发送时,部分客户端会出现乱码、纯文本渲染源码的问题

可直接运行的修复代码

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

// 初始化StringBuilder
StringBuilder buffer = new StringBuilder();
// 先拼接HTML基础头部,声明编码,兼容各类邮件/消息客户端
buffer.append("<!DOCTYPE html>")
        .append("<html lang=\"en\">")
        .append("<head><meta charset=\"UTF-8\"></head>")
        .append("<body>")
        .append("<p>Be sure to activate your account, by ");

// 提前拼接并编码激活URL,避免特殊字符破坏链接
String activationLink = String.format(
        "%sactivateAccount.do?clientId=%s&activationCode=%s&mat=%s",
        url,
        URLEncoder.encode(String.valueOf(client.getId()), StandardCharsets.UTF_8),
        URLEncoder.encode(client.getActivationCode(), StandardCharsets.UTF_8),
        URLEncoder.encode(String.valueOf(mobileApplicationType), StandardCharsets.UTF_8)
);

// 拼接a标签与剩余内容
buffer.append("<a href=\"")
        .append(activationLink)
        .append("\">clicking here</a>")
        .append(".</p>")
        .append("</body></html>");

// 最终生成的HTML正文内容
String htmlContent = buffer.toString();

落地注意事项

  • 调用发送接口时,必须显式将内容类型设置为text/html;charset=UTF-8,否则客户端会默认按纯文本渲染,直接展示HTML标签源码
  • 若动态参数来自用户输入,需要额外做HTML转义,避免参数中包含的双引号、尖括号等字符破坏HTML结构,公网场景下还可规避XSS风险
  • 如果后续需要拼接的HTML结构更复杂,不建议继续使用StringBuilder硬拼接,可选用轻量HTML模板引擎渲染参数,代码可维护性会大幅提升

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:33:22