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

SendGrid模板插入动态HTML及嵌套变量不解析问题咨询

SendGrid模板开发问题解答

如何正确向SendGrid模板中插入动态HTML数据

  • 明确变量渲染规则:如果要传入带HTML格式的富文本内容,模板中对应占位符必须使用三重大括号写法{{{变量名}}},该写法会关闭SendGrid默认的HTML字符转义,直接渲染传入的HTML结构;如果使用双重大括号{{变量名}}},所有HTML标签会被转义为普通字符直接展示,无法实现格式效果。
  • 动态HTML数据统一通过发送API的dynamic_template_data字段传递,不要在业务侧做整段模板拼接后再传入。参数传递示例:
{
  "template_id": "对应模板的ID值",
  "to": [{"email": "收件人邮箱"}],
  "from": {"email": "发件人邮箱"},
  "dynamic_template_data": {
    "content": "<p>这是一段带<strong>加粗高亮</strong>的富文本内容</p>"
  }
}
  • 传入的HTML片段不要包含<html>、<head>、<body>等顶层文档标签,只需要传正文结构片段即可,避免和模板本身的基础结构冲突导致渲染异常。

SendGrid变量嵌套问题说明与实现方案

SendGrid动态模板不支持变量嵌套解析:模板引擎只会对模板本身的占位符做单次渲染,不会二次解析变量值内部包含的模板标记,这也是传入hello {{{firstname}}}作为description变量值时,{{{firstname}}}直接以字面量形式输出的根本原因。

要实现静态文本+动态值的组合展示,有两种可落地的方案:

  • 方案1:业务侧提前拼接好最终内容。在调用发送接口前,就在自己的服务代码里把静态文本和动态字段拼合成最终的字符串(包括需要的HTML格式),再赋值给对应变量传给模板。代码逻辑示例:
// 服务端逻辑示例
const firstname = "李明";
const description = `hello <span style="color:#2563eb">${firstname}</span>`;
// 将拼接完成的description传入dynamic_template_data即可
  • 方案2:直接在模板内编写组合结构。如果内容结构固定,直接把静态文本和变量占位符都写在模板里即可,不需要通过变量传模板标记。比如要实现问候语效果,模板对应位置直接写:
<p>hello {{{firstname}}}</p>

如果存在多场景的内容切换需求,可以使用SendGrid模板内置的if/else条件语法实现分支渲染,不要尝试通过变量传模板标记的方式实现。

注意:不要试图通过自定义标签、特殊转义等方式强行实现嵌套变量解析,SendGrid渲染引擎没有提供二次解析变量值的能力,这类方案都无法稳定生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:21:40