2026-09-20 · 1 分钟阅读

自动删除 Gmail 旧邮件,恢复快速同步

一个使用多年的 Gmail 账户很容易积累超过 50 万封邮件。正是这个数量让 Thunderbird、Outlook 或手机客户端变得极其缓慢:每个客户端都要为整个邮箱建立索引并同步,消耗大量带宽、内存和电量。每天手动删除邮件既费时又容易出错。

为什么庞大的邮箱会拖慢邮件客户端

桌面和移动客户端都会保留邮箱的本地副本。会话数量越多,首次同步耗时越长,本地数据库越大,连接中断也越频繁。Gmail 本身依然流畅,但 IMAP 客户端并非如此。实用的做法是只保留近期邮件,例如最近 90 天,把更早的全部删除。

在 Google Apps Script 中编写分批清理脚本

Google Apps Script 可以免费替你完成清理。打开 script.google.com,新建项目并粘贴下面的代码。修改 domains 数组,加入你自己的地址或域名,因为脚本只会处理这些发件人的邮件。脚本会搜索超过 90 天的会话,以小批次移入垃圾箱,并在达到 6 分钟执行上限前停止。每个会话在垃圾箱中保留 30 天,随时可以恢复。

JS
function deleteNewsletters3MonthsPermanent() {
  var domains = [
    "site1.com", "user@site2.com",
  ];

  var batchSize = 25;
  var totalDeleted = 0;
  var startTime = new Date().getTime();
  var maxExecutionTimeMs = 5 * 60 * 1000; // 5 minutes safety threshold

  for (var b = 0; b < domains.length; b += batchSize) {
    if (new Date().getTime() - startTime > maxExecutionTimeMs) {
      Logger.log("Execution limit approaching. Stopped safely. Permanently deleted so far: " + totalDeleted);
      return;
    }

    var chunk = domains.slice(b, b + batchSize);
    var fromFilters = chunk.map(function(d) {
      return d.indexOf('@') > -1 ? 'from:' + d : 'from:*@' + d;
    }).join(' OR ');

    var searchQuery = '(' + fromFilters + ') older_than:90d';
    var pageToken = null;

    do {
      if (new Date().getTime() - startTime > maxExecutionTimeMs) {
        Logger.log("Execution limit approaching inside pagination. Permanently deleted so far: " + totalDeleted);
        return;
      }

      // Max results allowed per list request by the API is 500
      var response = Gmail.Users.Messages.list('me', {
        q: searchQuery,
        maxResults: 500,
        pageToken: pageToken
      });

      if (response.messages && response.messages.length > 0) {
        var messageIds = response.messages.map(function(m) { return m.id; });
        
        // Permanent bulk delete: 50 quota units for up to 1,000 IDs
        Gmail.Users.Messages.batchDelete({ ids: messageIds }, 'me');
        totalDeleted += messageIds.length;
        
        // Small delay to keep rate pacing clean
        Utilities.sleep(600);
      }

      pageToken = response.nextPageToken;
    } while (pageToken);
  }

  Logger.log("Finished. Total messages permanently deleted: " + totalDeleted);
}

额外技巧与安全备份

在执行任何操作之前,先用 Google Takeout 导出邮箱,保留一份本地副本。先用范围很窄的查询测试脚本,确认无误后再扩大范围。在 Thunderbird 中取消订阅「所有邮件」文件夹,并把 IMAP 同步限制为仅同步邮件头或最近几天,这两项调整都能立即减轻卡顿。

让我们合作吧

您需要更多信息、项目帮助或开发构想吗?

无论是简单的问题还是完整的项目,我都在这里。联系我,让我们将您的想法变为现实。

联系我 →

切换主题

选择一个专业主题进行探索: