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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:57:21