iT邦幫忙

0

📥 自動封存 Gmail 信件:從 Inbox Zero 到批次自救

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250621/20155103nyba1wW8fq.png

🧠 為什麼我開始實作「封存所有信件」?

最近讀了《搞定!》(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 封信件,整體過程平穩且自動。
一些實務經驗也值得記錄:

  • 單次封存數量不要太大(100 封最穩定)
  • 不建議設定 1 分鐘觸發(免費帳號最小頻率是 5 分鐘)
  • 每天 Gmail API 操作有上限,大約是 10,000 次
  • 若有 Workspace 帳號,或想封存所有信件、不只 primary,也可以擴充搜尋條件

🤖 這樣問 GPT 就能幫你做到

幫我寫一段 Google Apps Script,可以分批封存 Gmail 中屬於「主要分類」的所有信件,避免一次性執行超過時間限制,並能透過觸發器定時執行。

🚀 下一步想做的事

目前我已經完成「一次性封存過去萬封郵件」的目標。未來會考慮進一步加上:

  • older_than:7d 條件,每週自動封存一週前的信
  • -is:starred 避免封存重要信
  • 搭配標籤「待處理」做出 GTD 流程
  • LINE Notify 或 Email 通知封存進度

不只是清空收件匣,而是讓它變成一個可以掌握行動的起點。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
shaolin5525
iT邦新手 5 級 ‧ 2025-06-23 09:49:02

謝謝!

我要留言

立即登入留言