最近讀了《搞定!》(Getting Things Done),我開始實作「清空收件匣」。
對我來說,它不是完成每封郵件、也不是讓數字歸零,而是:讓我不再被信件牽著走,而是我掌控節奏。
但當 Gmail 裡超過一萬封未封存信,靠手動操作太辛苦了。
所以我動手寫了一段 Google Apps Script,幫我自動分批封存 Gmail「主要收件夾」的所有信件。這篇就來分享這段歷程。
一開始,我使用 GmailApp.search('in:inbox category:primary')
找出所有「主要分類」的信件,
再搭配 GmailApp.moveThreadsToArchive()
批次封存。
但遇到第一個問題是:執行時間太長會逾時(Apps Script 最多只能跑 6 分鐘)。
所以我後來採用了更穩定的作法 — 把每次封存控制在 100 封,然後用時間觸發器每 5 分鐘執行一次。
以下是完整程式碼,可直接貼在AppScript運作:
function archiveNextBatch() {
const batchSize = 100;
const lastStart = PropertiesService.getScriptProperties().getProperty('lastStartIndex') || 0;
const startIndex = parseInt(lastStart, 10);
const threads = GmailApp.search('in:inbox category:primary', startIndex, batchSize);
if (threads.length > 0) {
GmailApp.moveThreadsToArchive(threads);
Logger.log(`封存第 ${startIndex + 1} 至 ${startIndex + threads.length} 封信件`);
// 更新下一批起始 index
PropertiesService.getScriptProperties().setProperty('lastStartIndex', startIndex + threads.length);
} else {
Logger.log("✅ 所有信件已封存完畢!");
PropertiesService.getScriptProperties().deleteProperty('lastStartIndex');
}
}
這套腳本搭配 Apps Script 的觸發器,每 5 分鐘封存 100 封信件,整體過程平穩且自動。
一些實務經驗也值得記錄:
幫我寫一段 Google Apps Script,可以分批封存 Gmail 中屬於「主要分類」的所有信件,避免一次性執行超過時間限制,並能透過觸發器定時執行。
目前我已經完成「一次性封存過去萬封郵件」的目標。未來會考慮進一步加上:
older_than:7d
條件,每週自動封存一週前的信-is:starred
避免封存重要信不只是清空收件匣,而是讓它變成一個可以掌握行動的起點。