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

基于Google Sheets数据的Apps Script发送Gmail无报错但失败

Google Sheets邮件发送脚本故障排查与修复

问题背景

我需要实现自动给Google表格中的收件人列表发送邮件,作为Apps Script和JavaScript新手,跟着教程写了对应代码,但给自己测试时,脚本执行无报错却收不到邮件。

表格结构与规则

表格列说明

行号A列(People)B列(Send)C列(Email)D列(Subject)E列(Body)F列(Blind Carbon Copy)
1姓名发送(复选框)邮箱地址邮件主题邮件正文密送地址
2name01☑email01subject01body01common_bcc_address
3name02☑email02subject02body02
4name03☐email03subject03body03

规则

  • 所有邮件共用F2单元格的BCC地址
  • 仅B列复选框勾选时,发送该行对应邮件
  • 工作表名称为People1

原脚本代码

function sendEmails() {
  var ss  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('People1');
  var values = ss.getDataRange().getValues();
  var ebcc = ss.getRange(2, 6).getValue()

  for (var i = 0; i > values.length ;i++){
    if (values[i][3] == true) {  
      var theEmail = ss.getRange(i,3).getValue();
      var theSubject = ss.getRange(i,4).getValue();
      var theBody = ss.getRange(i,5).getValue();
      GmailApp.sendEmail(theEmail, theSubject, theBody, {bcc: ebcc})
      }
  }
}

问题分析

脚本执行无报错但不发送邮件,核心问题有三个:

  1. 循环条件逻辑颠倒:i > values.length 导致循环从一开始就不执行,正确条件应为i < values.length
  2. 数组索引错误:
    • B列(复选框)对应数组下标为1(数组从0开始计数),原脚本中values[i][3]取的是D列(主题)的值,和复选框无关
    • 表格第1行是表头,数据从第2行开始,循环应从i=1开始(对应表格行号2)
  3. 单元格读取方式低效且错误:循环内重复调用getRange,且行号索引错误(数组下标i对应表格行号应为i+1),导致读取到错误单元格

修复后的脚本

function sendEmails() {
  // 获取指定工作表
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('People1');
  // 获取所有单元格数据(二维数组)
  var data = sheet.getDataRange().getValues();
  // 读取F2单元格的共用BCC地址(表格行2列6,对应数组索引[1][5])
  var commonBcc = data[1][5];

  // 从第2行数据开始循环(跳过表头行)
  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    // 检查B列复选框是否勾选
    var shouldSend = row[1];
    if (shouldSend === true) {
      // 从数组中读取当前行的邮件信息
      var recipient = row[2]; // C列:邮箱地址
      var subject = row[3];   // D列:邮件主题
      var body = row[4];      // E列:邮件正文

      // 发送邮件,附带BCC参数
      GmailApp.sendEmail(recipient, subject, body, {bcc: commonBcc});
    }
  }
}

验证步骤

  1. 首次运行脚本时,完成Gmail和Google Sheets的授权流程
  2. 将表格中某行的邮箱地址改为自己的邮箱,勾选对应B列复选框
  3. 运行脚本后,检查收件箱(若未收到,查看垃圾邮件箱)
  4. 确认F2单元格的BCC地址格式正确,若不需要BCC,可将参数改为{bcc: commonBcc || ''}避免空值问题

内容的提问来源于stack exchange,提问作者Mikołaj Gano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:51:07