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

Google App Script 突发故障:CCTV标签邮件清理脚本停止运行

修复Gmail自动清理旧邮件脚本停止运行的问题

原脚本存在的核心问题

你的脚本停止工作主要是因为几个设计缺陷:

  1. label.getThreads() 默认只返回前100条邮件线程,当标签下邮件超过100条时,后续的旧邮件根本不会被处理
  2. 代码里定义了batchSize和searchSize但完全没用到,等于白设置
  3. 遍历所有线程再判断日期的方式效率极低,线程数量大时容易触发Google Apps Script的6分钟执行超时限制

修复后的完整代码

function cleanUp() {
  var delayDays = 60; // 邮件超过此天数会被移至垃圾箱
  var batchSize = 100; // 每次处理的线程数量
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate() - delayDays);
  var maxDateStr = Utilities.formatDate(maxDate, Session.getScriptTimeZone(), "yyyy/MM/dd");

  var label = GmailApp.getUserLabelByName("CCTV");
  if (!label) {
    console.log("未找到「CCTV」标签,请检查标签名称是否正确");
    return;
  }

  // 用Gmail搜索语法直接筛选符合条件的线程,不用遍历全部
  var searchQuery = `label:${label.getName()} before:${maxDateStr}`;
  var threads;
  var pageToken = null;

  do {
    // 分页获取线程,避免一次性加载过多数据
    threads = GmailApp.search(searchQuery, 0, batchSize, pageToken);
    if (threads.length === 0) break;

    // 批量移至垃圾箱,比单条处理高效得多
    GmailApp.moveThreadsToTrash(threads);
    console.log(`已处理 ${threads.length} 条旧邮件线程`);

    // 更新分页token,处理下一批数据
    pageToken = threads.length < batchSize ? null : GmailApp.getNextPageToken();
  } while (pageToken);

  console.log("清理完成");
}

关键修改说明

  • 标签存在性校验:如果「CCTV」标签被误删或名称修改,脚本会直接提示并终止,避免无意义的报错
  • 精准搜索替代全量遍历:通过before:搜索关键字直接过滤60天前的邮件,大幅减少需要处理的数据量
  • 分页处理机制:利用pageToken实现分批加载邮件,确保能处理标签下所有符合条件的邮件,不会遗漏
  • 批量操作优化:用moveThreadsToTrash()批量处理线程,减少API调用次数,降低超时风险
  • 日志输出:方便你查看执行进度,排查异常情况

额外排查步骤

  1. 确认「CCTV」标签名称完全匹配(注意大小写、空格,比如不要写成「cctv」或「CCTV 」)
  2. 检查脚本授权:新建项目后需要重新授权Gmail访问权限,确保授权流程完成
  3. 查看执行日志:在Google Apps Script编辑器中点击「查看」→「日志」,查看是否有具体报错信息(比如权限不足、标签不存在等)

内容的提问来源于stack exchange,提问作者Madeon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:25:20