Apps Script邮件合并:更新K列发送状态并避免重复发信
修改后的完整代码
function JustSendEmail() { // 变量定义:表格列索引(从0开始计数,A列对应0) var anrede = 2; var nachname = 3; var emailAdresse = 5; var terminTag = 6; var terminUhrzeit = 8; var terminURL = 9; // 补充定义邮件主题变量,原代码未定义会报错,可自行修改内容 var betreff = "termin Bestätigung"; var emailTemp = HtmlService.createTemplateFromFile('emailEinladung'); var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("terminBestaetigen"); var data = ws.getRange("A3:K" + ws.getLastRow()).getValues(); // 循环遍历每行数据,增加索引参数i用于定位表格行 data.forEach(function (row, i) { // 跳过K列已标记为非待发送状态的行,避免重复发信 // K列对应数组索引为10(A=0,K是第11列) if(row[10] !== "EMAIL NOT SENT YET") return; emailTemp.anrede1 = row[anrede]; emailTemp.nachname1 = row[nachname]; emailTemp.emailAdresse1 = row[emailAdresse]; emailTemp.terminTag1 = row[terminTag]; emailTemp.terminUhrzeit1 = row[terminUhrzeit]; emailTemp.terminURL1 = row[terminURL]; var htmlMessage = emailTemp.evaluate().getContent(); // 异常捕获避免单条发送失败中断整个流程 try { GmailApp.sendEmail(row[emailAdresse], betreff, "Dies ist eine Nachricht im HTML-Format. Sie müßen Ihre Email-Software entsprechend einrichten.", { htmlBody: htmlMessage, replyTo: "xxxx@testingappsscript.edu" } ); // 发送成功后更新K列状态 // 数据从第3行开始读取,数组索引i对应表格行号为i+3,K列是第11列 ws.getRange(i + 3, 11).setValue("EMAIL SENT"); } catch (e) { // 可选:发送失败时在K列标记错误信息,方便排查,不需要可删除 ws.getRange(i + 3, 11).setValue("SEND FAILED: " + e.message); } }); }
核心改动说明
- 补充了原代码缺失的
betreff邮件主题变量,否则脚本运行会直接报错,可根据实际需求修改主题内容 - 在循环入口增加状态判断:读取当前行K列(数组索引为10,因为数组默认从0开始计数)的状态,非待发送状态的行直接跳过,实现避免重复发信的需求
- 为循环回调增加索引参数
i,配合数据起始行号(从第3行开始)定位当前行在表格中的实际位置,发送成功后直接写入新状态到K列 - 新增异常捕获逻辑,避免单个收件人邮箱无效、发送触发限制等问题导致整个批量发送流程中断
内容的提问来源于stack exchange,提问作者Bob Hardball
相关产品推荐
相关产品推荐

