运行Google Apps Script自动发邮件脚本未成功发送邮件求助
问题排查及解决方案
可直接定位的显性问题
- 邮件发送代码被注释:你现有代码中
MailApp.sendEmail(emailAddress, subject, message)一行前加了//注释符,就算日期匹配条件满足,也不会真的触发邮件发送,首先删除这行开头的//即可。 - 硬编码时区易导致匹配失败:代码中固定使用
GMT+0200时区格式化日期,只要脚本项目时区、谷歌表格时区、你实际所在时区三者有一个不匹配,就会出现日期对比不一致的情况,建议替换为脚本默认时区,避免硬编码错误。 - 未配置自动触发器:如果你的预期是脚本自动每日检查发送,需要额外配置时间驱动触发器,手动点击运行才会执行当前代码,无法自动触发。
其他需要核对的隐性问题
- 确认你的谷歌表格工作表名称完全等于
Mysheet,大小写、前后空格都要完全一致,否则会获取工作表失败,后续逻辑全部无法执行。 - 确认表格列顺序和代码索引匹配:代码中
row[0]取A列(邮箱)、row[1]取B列(日期)、row[2]取C列(邮件内容),如果你的表格列顺序不匹配,会出现取值错误、邮箱无效等问题。 - 检查脚本权限:首次运行脚本需要授予邮件发送权限,可在Apps Script左侧的「执行记录」页面查看是否有权限类报错。
修改后可用参考代码
function sendEmail() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Mysheet"); var startRow = 2; var numRows = sheet.getLastRow() - 1; if(numRows < 1) return; // 空数据直接返回避免报错 var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn()); var data = dataRange.getValues(); var scriptTimeZone = Session.getScriptTimeZone(); // 取脚本时区避免硬编码错误 for (var i = 0; i < data.length; i++) { var row = data[i]; if(!row[0] || !row[1]) continue; // 空邮箱或空日期直接跳过 var currentDate = new Date(); var sheetDate = new Date(row[1]); var formattedCurrent = Utilities.formatDate(currentDate, scriptTimeZone, 'yyyy:MM:dd'); var formattedSheet = Utilities.formatDate(sheetDate, scriptTimeZone, 'yyyy:MM:dd'); if (formattedCurrent === formattedSheet){ var emailAddress = row[0]; var message = row[2]; var subject = "Sending emails from a Spreadsheet"; MailApp.sendEmail(emailAddress, subject, message); Logger.log('已发送邮件至:'+emailAddress); } } }
自动触发配置方法
打开Apps Script编辑页,点击左侧「触发器」按钮→添加触发器,按以下参数配置:
- 选择要运行的函数:
sendEmail - 选择事件源:
时间驱动 - 选择类型:
日计时器 - 选择时间范围:选择你想要每日触发发送的时间段
保存后按照提示完成授权即可。
内容的提问来源于stack exchange,提问作者HSHO
相关产品推荐
相关产品推荐

