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

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);
    }
    

辅助调试步骤

  1. 查看脚本日志:在编辑器中点击「查看」→「日志」,确认fourteenDaysLater的实际值,以及代码是否进入邮件发送分支。
  2. 检查触发器权限:首次手动运行脚本需完成授权,若授权失效会导致触发器执行失败。
  3. 确认数据范围:当前numRows = 2仅处理第2、3行数据,需确保目标邮箱在该范围内。

内容的提问来源于stack exchange,提问作者Google script novice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:35:40