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

如何将Apps Script变量传递到HTML模板实现邮件变量替换

问题解决:HTML模板变量未替换的修复方案

问题根源

你当前用HtmlService.createHtmlOutputFromFile('pendingEmail').getContent()获取的是静态HTML字符串,不是模板对象。给这个字符串添加属性(比如template.studentFirstName)完全不会生效,自然没法替换模板里的变量。而直接拼接的部分能正常替换,是因为那是在字符串里直接插入了变量值。

修复步骤

  1. 正确获取模板对象
    替换模板获取方式,使用createTemplateFromFile——这是Google Apps Script专门用于变量替换的模板引擎方法。

  2. 赋值变量并生成最终HTML
    给模板对象赋值后,调用evaluate().getContent()生成已替换变量的完整HTML内容。

  3. 统一邮件内容格式
    把原本在htmlBody里拼接的后半段内容移到HTML模板中,让整个邮件保持统一的HTML格式,避免重复内容和格式混乱。

修改后的完整代码

function onPendingEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 事件变量
  var range = e.range;
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var cellValue = sheet.getActiveCell().getValue();

  var parentEmail = sheet.getRange(row,30).getValue();
  var studentEmail = sheet.getRange(row,12).getValue();
  var studentFirstName = sheet.getRange(row,9).getValue();
  var studentLastName = sheet.getRange(row,10).getValue();
  var team1 =  sheet.getRange(row,3).getValue();
  var team2 =  sheet.getRange(row,4).getValue();
  var team3 =  sheet.getRange(row,5).getValue();
  
  var recipient = studentEmail + ',' + parentEmail;

  // 获取模板对象(关键修改:改用createTemplateFromFile)
  var template = HtmlService.createTemplateFromFile('pendingEmail');

  // 给模板变量赋值
  template.parentEmail = parentEmail;
  template.studentEmail = studentEmail;
  template.studentFirstName = studentFirstName;
  template.studentLastName = studentLastName;
  template.team1 = team1;
  template.team2 = team2;
  template.team3 = team3;

  if (col == 2 && cellValue == "Pending"){
    // 生成替换变量后的最终HTML
    var finalHtml = template.evaluate().getContent();
    
    MailApp.sendEmail({
      to: recipient,
      subject: "你的申请已进入待处理状态,下一步操作指引",
      htmlBody: finalHtml
    });
    Browser.msgBox('邮件已发送至: ' + recipient);
  };
}

对应HTML模板(pendingEmail.html)写法示例

模板里要用<?= 变量名 ?>引用脚本中赋值的变量,示例如下:

<p>你的申请已进入待处理状态!</p>
<p>你好 <?= studentFirstName ?> <?= studentLastName ?>!</p>
<p>恭喜!你的申请已进入待处理状态!</p>
<p>欢迎加入,<?= studentFirstName ?>。你已被分配至团队 <?= team1 ?> <?= team2 ?> <?= team3 ?>,完成以下步骤即可正式加入:</p>
<ol>
  <li>注册FIRST账号并签署2024 FIRST同意与免责声明,查看官方详细指引</li>
  <li>签署德克萨斯州FIRST免责协议</li>
  <li>阅读我们的安全手册</li>
  <li>签署车间规则</li>
  <li>请家长联系Charlie支付会费或协商付款计划</li>
</ol>

额外注意事项

  • 模板中的变量名要和脚本里赋值的变量名完全一致(大小写敏感)
  • evaluate()方法会自动完成变量替换,生成可直接使用的HTML字符串
  • 所有内容都放入模板后,邮件格式会保持统一,不会再出现半格式化半纯文本的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:44:52