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

如何用Google Apps Script将取消暂缓的Gmail邮件标记为未读?

改进Gmail取消暂缓邮件标记为未读的Google Apps Script方案

原代码失效的核心原因是Gmail没有内置snoozed标签,无法通过标签识别已取消暂缓的邮件。要实现过去7天内取消暂缓的邮件自动标记为未读,可以利用Gmail Apps Script提供的snoozeExpirationTime属性——该属性记录了邮件线程的暂缓到期时间,当暂缓到期(即取消暂缓)后,这个时间会被标记为已过去的时间点,结合时间范围筛选即可精准定位目标邮件。

改进后的代码

function markRecentlyUnsnoozedAsUnread() {
  // 计算7天前的时间戳(毫秒)
  const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
  // 搜索收件箱内的已读邮件(仅处理已读,避免重复操作)
  const threads = GmailApp.search('label:inbox is:read');

  threads.forEach(thread => {
    const snoozeExpireTime = thread.getSnoozeExpirationTime();
    // 判断是否为过去7天内取消暂缓的线程:存在暂缓到期时间,且该时间在7天前之后
    if (snoozeExpireTime && snoozeExpireTime > sevenDaysAgo) {
      thread.markUnread();
    }
  });
}

关键改进点

  • 替换无效标签逻辑:用官方API的getSnoozeExpirationTime()替代不存在的snoozed标签,这是Gmail用于追踪暂缓状态的原生属性,准确性有保障。
  • 精准时间范围筛选:通过sevenDaysAgo计算时间阈值,只处理过去7天内取消暂缓的邮件,避免误操作更早的邮件。
  • 优化执行效率:直接对邮件线程(thread)进行标记操作,而非单条消息——因为Gmail的暂缓是针对整个线程的,这样更符合实际使用逻辑,也提升了脚本运行速度。
  • 过滤已读邮件:搜索时限定is:read,跳过本来就是未读的邮件,减少不必要的操作。

使用步骤

  • 打开Google Apps Script平台,创建新脚本项目。
  • 将上述代码粘贴到编辑器中。
  • 点击运行按钮,首次执行需完成Gmail权限授权。
  • 如需自动执行,可设置时间驱动触发器(比如每日执行一次),实现无人值守的自动标记。

内容的提问来源于stack exchange,提问作者Patrick from NDepend team

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:20:17