如何将Apps Script变量传递到HTML模板实现邮件变量替换
问题解决:HTML模板变量未替换的修复方案
问题根源
你当前用HtmlService.createHtmlOutputFromFile('pendingEmail').getContent()获取的是静态HTML字符串,不是模板对象。给这个字符串添加属性(比如template.studentFirstName)完全不会生效,自然没法替换模板里的变量。而直接拼接的部分能正常替换,是因为那是在字符串里直接插入了变量值。
修复步骤
正确获取模板对象
替换模板获取方式,使用createTemplateFromFile——这是Google Apps Script专门用于变量替换的模板引擎方法。赋值变量并生成最终HTML
给模板对象赋值后,调用evaluate().getContent()生成已替换变量的完整HTML内容。统一邮件内容格式
把原本在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
相关产品推荐
相关产品推荐

