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

循环发送HTML邮件:Google Apps Script替换文本邮件为HTML模板问题

解决方法:无需重写全部代码,只需调整HTML模板加载与邮件发送逻辑

你完全不需要重写整个脚本,只需要修改HTML模板加载和邮件发送这两部分逻辑就可以解决问题。Google Apps Script里使用HTML模板有固定的语法,不能直接引用文件名,同时发送HTML邮件需要指定专门的参数,下面是具体的调整方案:

核心修改要点

  1. 用HtmlService加载并渲染HTML模板文件
  2. 给模板动态填充表格中的数据(如果你的模板需要动态内容)
  3. 修改邮件发送的调用方式,支持HTML格式内容

修改后的完整代码

var EMAIL_SENT = 'EMAIL SENT';
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = sheet.getRange("F1:F").getDisplayValues().filter(String).length;
  // Fetch the range of cells
  var dataRange = sheet.getRange(2, 1, numRows - 1, 21);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[14];
    var emailSent = row[20];
    
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
      // 1. 加载你的HTML模板文件
      var template = HtmlService.createTemplateFromFile('template_social');
      
      // 2. 给模板中的动态变量赋值(根据你的模板需求调整)
      // 比如模板里如果有 <?= messageContent ?> 占位符,就把表格里的内容传进去
      template.messageContent = row[19];
      // 如果还有其他需要动态填充的内容,比如会员姓名、编号,都可以在这里添加
      // template.memberName = row[0];
      
      // 3. 将模板渲染成可发送的HTML字符串
      var htmlMessage = template.evaluate().getContent();
      
      var subject = 'Un nouvel adhérent vous a été affecté';
      
      // 4. 发送HTML邮件,同时保留纯文本降级版本(兼容不支持HTML的邮箱)
      MailApp.sendEmail({
        to: emailAddress,
        subject: subject,
        body: row[19], // 纯文本 fallback,用原来的文本内容
        htmlBody: htmlMessage // HTML格式的邮件内容
      });
      
      sheet.getRange(startRow + i, 21).setValue(EMAIL_SENT);
      // 确保单元格立即更新,避免脚本中断导致数据丢失
      SpreadsheetApp.flush();
    }
  }
}

你的HTML模板写法参考

如果需要在模板里使用动态数据,比如展示表格中获取的内容,模板内容可以这样写:

<!DOCTYPE html>
<html>
  <body>
    <h3 style="color: #2c3e50;">Un nouvel adhérent vous a été affecté</h3>
    <p><?= messageContent ?></p>
    <!-- 如果有其他动态内容,比如会员信息 -->
    <!-- <p>Nom de l'adhérent: <strong><?= memberName ?></strong></p> -->
  </body>
</html>

这样调整后,原来的核心逻辑(读取表格数据、避免重复发送邮件)都保留了下来,只是替换了邮件内容的生成方式,完全不需要重写全部代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:47:56