循环发送HTML邮件:Google Apps Script替换文本邮件为HTML模板问题
解决方法:无需重写全部代码,只需调整HTML模板加载与邮件发送逻辑
你完全不需要重写整个脚本,只需要修改HTML模板加载和邮件发送这两部分逻辑就可以解决问题。Google Apps Script里使用HTML模板有固定的语法,不能直接引用文件名,同时发送HTML邮件需要指定专门的参数,下面是具体的调整方案:
核心修改要点
- 用
HtmlService加载并渲染HTML模板文件 - 给模板动态填充表格中的数据(如果你的模板需要动态内容)
- 修改邮件发送的调用方式,支持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
相关产品推荐
相关产品推荐

