Google Apps Script自动发邮件如何逐行读取对应CC抄送地址
问题根因
出现所有邮件固定使用第一行CC地址的问题,由两处代码错误导致:
- 调用
getValue()方法读取多单元格范围E2:E时,该方法仅会返回范围左上角第一个单元格(即E2)的数值,无法获取整列所有CC地址 - CC地址在循环外读取,遍历每一行发信时没有匹配当前行对应的CC字段,所有发信请求复用了同一个固定值
你已经在代码里定义了CC列的索引copyc = 4,且拉取全量数据的范围A2:E已经覆盖了CC列,不需要单独额外读取CC列数据。
修复后完整代码
function Bday() { var slno = 0; var name1 = 1; var email = 2; var dob = 3; var copyc = 4; var emailTemp = HtmlService.createTemplateFromFile("email"); var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Full list"); var wsSettings = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings"); var name = wsSettings.getRange("B2").getValue(); var subject = wsSettings.getRange("B1").getValue(); var data = ws.getRange("A2:E" + ws.getLastRow()).getValues(); data.forEach(function(row){ // 跳过收件人邮箱为空的无效行,避免执行报错 if (!row[email]) return; emailTemp.fn = row[name1]; emailTemp.empid = row[slno]; emailTemp.dob = row[dob]; var htmlMessage = emailTemp.evaluate().getContent(); GmailApp.sendEmail( row[email], subject, "Your email doesnt support HTML", { name: name, cc: row[copyc], // 直接取当前行对应的CC地址 htmlBody: htmlMessage } ); }); }
注意事项
- 单封邮件需要配置多个抄送人的场景,直接在对应行E列单元格内用英文逗号分隔多个邮箱地址即可,接口会自动识别解析
- 若后续需要添加密送(BCC)能力,逻辑和CC完全一致,在发信参数中增加
bcc字段,传入对应行的密送列值即可 - 代码中新增了空行跳过逻辑,避免表格末尾空行或者缺漏收件人邮箱的行触发执行报错
内容的提问来源于stack exchange,提问作者Gitz
相关产品推荐
相关产品推荐

