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

如何在TinyMCE表单提交→谷歌表格→邮件流程中保留文本格式

如何在TinyMCE表单提交→谷歌表格→邮件流程中保留文本格式

我太懂你现在的糟心情况了——用TinyMCE编辑的加粗、斜体这些富文本,提交到谷歌表格后,发邮件时居然直接显示一堆<strong>、<p>这类HTML标签,完全没渲染出预期的格式对吧?别着急,我帮你拆解问题,给你搞定的办法。

问题根源

谷歌表格会原样存储TinyMCE生成的HTML代码,这本身没问题。但你在HTML邮件模板里用<?= alertDetails ?>输出内容时,Google Apps Script的模板引擎会自动转义HTML特殊字符(比如把<变成&lt;),导致邮件里显示的是纯文本形式的标签,而不是被渲染后的样式。

解决办法:用未转义输出指令替代转义输出

核心就是把模板里的转义输出标签<?= ?>换成未转义的<?!= ?>,这样模板引擎就会直接把原始HTML代码插入到邮件内容里,让邮件客户端能正常解析渲染格式。

步骤1:修改Google Apps Script代码(可选优化)

其实你不需要提前用HtmlService.createHtmlOutput处理内容,直接把表格里存的原始HTML字符串传给模板就行(要是担心XSS风险,保留HtmlService.createHtmlOutput(...).getContent()做安全过滤也可以,不影响效果):

function saveAlerts(data) {
  // 原有保存到谷歌表格的代码保持不变
  let sheetData = alerts.getDataRange().getDisplayValues();
  let keys = sheetData[0];
  data.forEach(el => {
    let temp = [];
    keys.forEach(key => {
      temp.push(el[key]);
    });
    alerts.appendRow(temp);
  });

  // 加载邮件模板
  let template = HtmlService.createTemplateFromFile('htmlEmail');
  template.data = data;
  // 直接传递原始的Alert Details HTML内容
  template.alertDetails = data[0]['Alert Details'];
  // (可选)如果需要安全过滤:
  // template.alertDetails = HtmlService.createHtmlOutput(data[0]['Alert Details']).getContent();

  // 生成邮件HTML内容
  let message = template.evaluate().getContent();

  // 发送邮件
  MailApp.sendEmail({
    to: 'lofton.gentry@one-line.com',
    subject: `${data[0]['Alert Subject']}`,
    htmlBody: message,
    replyTo: `${data[0]['User Email']}`
  });
}

步骤2:修改HTML邮件模板

把模板里输出Alert Details的部分,从<?= alertDetails ?>改成<?!= alertDetails ?>:

<body>
  <div class="alert-container">
    <div class="alert-header" id="alertHeader">
      <p class="alert-title">New Alert</p>
    </div>
    <div class="alert-body">
      <!-- 原有其他字段保持不变 -->
      <p id="alert-type"><strong>Type:</strong><?= data[0]['Alert Type'] ?></p>
      <p id="alert-date"><strong>Alert Date:</strong><?= data[0]['Alert Date'] ?></p>
      <p id="alert-loc"><strong>Location:</strong><?= data[0]['Alert Location'] ?></p>
      <p id="alert-loc"><strong>Code:</strong><?= data[0]['Alert Code'] ?></p>
      <p id="alert-loc"><strong>Affected:</strong><?= data[0]['Services Affected'] ?></p>
      <p id="alert-add"><strong>Alert Address:</strong><?= data[0]['Alert Address'] ?></p>
      
      <p id="alert-details"><strong>Alert Details:</strong></p>
      <!-- 关键修改:用<?!=替代<?= -->
      <div><?!= alertDetails ?></div>
    </div>
  </div>
</body>

原理说明

<?= ?>是Google Apps Script模板的转义输出指令,它会把所有HTML特殊字符转义,防止XSS但也导致标签无法被渲染;而<?!= ?>是未转义输出指令,会直接把变量里的HTML代码插入到最终的邮件HTML中,邮件客户端解析时就能识别<strong>、<em>这些标签,正确显示加粗、斜体等格式了。

你之前单独测试HtmlService.createHtmlOutput(alertDetails).getContent()能生效,就是因为那时候直接输出了原始HTML,没有经过模板的转义处理。现在换成未转义输出,就能和模板完美配合啦~

备注:内容来源于stack exchange,提问作者Lofton Gentry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:54:33