Google Apps Script 无法发送邮件 代码错误排查
脚本无法正常发送邮件的常见错误点
- 范围拼接语法错误
你当前写的范围表达式是"B2:L80" + sh.getLastRow(),如果表格最后一行是80行,最终拼接出来的范围字符串是B2:L8080,属于无效的A1单元格表示法,脚本运行到取数这一步就会直接抛出异常,根本执行不到发邮件的逻辑。正确的范围写法应该是"B2:L" + sh.getLastRow(),去掉硬编码写死的80。 - 条件判断类型不匹配
Google表格中复选框、逻辑函数返回的判断结果是原生布尔类型true/false,不是字符串类型的"TRUE"。你用严格相等=== "TRUE"做判断,永远匹配不到符合条件的行,自然不会触发发邮件动作。判断条件需要改成if (overdueValue === true),如果不确定值的类型也可以直接写if (overdueValue)做真值判断。 - 列索引偏移错误
你当前取数范围是B列到L列,返回的二维数组中,每一行的索引0对应B列、索引1对应C列,以此类推:索引9对应K列,索引10对应L列。你需要核对实际存储触发标记、联系人姓名的列位置,避免取错列导致值为空、判断失效。 - 权限未授权
首次运行调用GmailApp.sendEmail接口的脚本时,会弹出Google授权窗口,需要手动同意脚本访问Gmail的权限,否则会抛出权限异常导致发送失败。
修正后可参考的代码
function sendEmail() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet1"); // 修复范围拼接错误 const data = sh.getRange("B2:L" + sh.getLastRow()).getValues(); data.forEach(r=>{ // 请根据实际列位置调整索引,B列为起始索引0 let triggerFlag = r[9]; // 修复布尔类型判断 if (triggerFlag === true){ let name = r[10]; let message = "Reach out to " + name; let subject = "Reach out to this person."; // 首次运行请同意弹出的授权申请 GmailApp.sendEmail("xxxx@gmail.com", subject, message); } }); }
内容的提问来源于stack exchange,提问作者Madara Kļavinska
相关产品推荐
相关产品推荐

