Google Apps Script邮件触发脚本异常排查:未按时发送邮件
代码问题分析及修复建议
核心问题排查与修复
日期解析歧义
单元格中的09/02/23格式存在地区解析差异:JavaScript的new Date()可能将其识别为MM/DD/YY(2月9日)或DD/MM/YY(9月2日),直接导致14天后的日期计算错误。
修复方案:使用明确的ISO日期格式(如2023-02-09),或手动解析日期:// 假设单元格是DD/MM/YY格式 const dateStr = hpsheet.getRange("F6").getValue(); const [day, month, year] = dateStr.split("/"); const currentDate = new Date(2000 + parseInt(year), parseInt(month)-1, parseInt(day));循环方式不规范
for (i in data)遍历数组可能触发原型属性遍历,导致意外行为。建议改用更可靠的遍历方式:// 简洁的for...of循环 for (const row of data) { const emailAddress = row[0]; const personName = row[1]; // 后续逻辑... }未声明变量引发全局污染
i、row等变量未用let/const声明,会成为全局变量,可能导致变量冲突。所有变量需添加声明:const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("Email addresses"); const hpsheet = ss.getSheetByName("Main Page-Control Plan");日期比较的时间精度问题
单元格日期默认时间为00:00:00,而new Date()会获取当前完整时间(如6:30:00),可能导致逻辑判断偏差。统一时间精度:const today = new Date(); today.setHours(0, 0, 0, 0); fourteenDaysLater.setHours(0, 0, 0, 0); if (fourteenDaysLater <= today) { MailApp.sendEmail(emailAddress, subject, message); }
辅助调试步骤
- 查看脚本日志:在编辑器中点击「查看」→「日志」,确认
fourteenDaysLater的实际值,以及代码是否进入邮件发送分支。 - 检查触发器权限:首次手动运行脚本需完成授权,若授权失效会导致触发器执行失败。
- 确认数据范围:当前
numRows = 2仅处理第2、3行数据,需确保目标邮箱在该范围内。
内容的提问来源于stack exchange,提问作者Google script novice
相关产品推荐
相关产品推荐

