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

向HTML模板传递HTML内容时标签转义问题及解决方案咨询

解决Google Apps Script HTML模板传递HTML字符串被转义的问题

问题根源

用<?= someVariable ?>输出变量时,HtmlService会自动转义HTML实体(<变成<,>变成>),这本来是防XSS的安全机制,但会导致你传入的HTML格式字符串没法正常渲染,又因为邮件客户端不支持JS,没法用前端方法反转义。

直接解决方案:用不转义的输出语法

把HTML模板里的<?= items ?>改成<?!= items ?>——这个语法会直接输出原始HTML内容,完全不做转义处理,刚好适配邮件场景。

代码示例

.gs 文件代码

function sendHtmlEmail() {
  // 构造你要传递的HTML格式内容
  const items = '<div><h3>测试标题</h3><p>这是带<b>加粗</b>的段落内容</p></div>';
  
  // 创建模板并赋值
  const template = HtmlService.createTemplateFromFile('emailTemplate');
  template.items = items;
  
  // 生成最终的HTML内容(这里不会转义items里的标签)
  const htmlContent = template.evaluate().getContent();
  
  // 发送邮件(示例)
  GmailApp.sendEmail({
    to: 'target@example.com',
    subject: 'HTML内容测试',
    htmlBody: htmlContent
  });
}

HTML模板文件(命名为emailTemplate.html)

<!DOCTYPE html>
<html>
  <body>
    <h1>邮件主标题</h1>
    <!-- 用<?!= 直接输出原始HTML -->
    <?!= items ?>
  </body>
</html>

安全提醒

  • 只有当items的内容是完全可信的(比如你自己生成的HTML,不是用户输入的内容),才用<?!= ?>,不然可能引入XSS风险,恶意代码会被直接执行。
  • 如果内容包含用户输入,一定要先过滤掉危险标签(比如<script>、<iframe>),再用这个语法输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:55:27