Gmail 自動化:每天早上只看一封摘要信
你打開 Gmail,收件匣顯示 247 封未讀。你在心裡默默排序:哪封是真的要緊的?哪封可以等?哪封根本不用看?這個篩選過程耗掉你每天早上最清醒的 20 分鐘——還沒開始工作,注意力已經被瓜分完了。
這堂課用 n8n 把這件事交給機器做。你要建三條流程:AI 自動替每封新信貼上分類標籤、每天早上八點寄一封「今日摘要」到你信箱、遇到需要回的信自動準備好草稿等你確認。信件量不變,但你每天只需要讀一封信。
這堂學什麼
- 三種路線對比:Google 內建 Gemini 功能 vs Apps Script vs n8n,搞清楚為什麼選 n8n
- Google Cloud Console 設定:替 n8n 申請 Gmail API 存取授權,逐步拆解 OAuth 設定——這是新手最常卡關的環節
- 流程①:AI 智慧貼標籤:收到新信立刻分類(重要 / 帳單 / 訂閱 / 促銷),標籤自動掛到信件上
- 流程②:晨間摘要信:每天早上抓過去 24 小時的信,AI 排序摘要後寄回自己的信箱
- 流程③:AI 草稿回覆:對需要回的信貼上「待回覆」標籤,AI 自動生成草稿存著,你確認後再送出
- 隱私邊界:哪些信可以放心送 AI、哪些信的內容絕對不行
- 常見坑:OAuth redirect URI 不對、API quota 耗盡、token 七天過期等錯誤的根因與解法
Gmail 自動化全景
先看一張「改變前後」的對比,確認你要做的是什麼:

本課三條流程各自獨立,你可以只建其中一條,也可以三條一起跑:

三條流程的信件都走同一組 Gmail OAuth2 憑證,所以設定一次、三條共用。
先搞清楚:三種路線怎麼選
「Gmail 自動化」聽起來是一件事,但實際上有三種不同路線,每種適合不同的人:

Google 內建 Gemini 功能(2026 現況):Gmail 在 2026 年初全面進入「Gemini 時代」。現在 Gmail 已經內建 AI Inbox(智慧收件匣)、Help Me Write(幫我撰寫)、Suggested Replies(建議回覆)等功能。但有幾個現實限制:AI Inbox 和 AI Overviews 需要 Google AI Pro(每月 $19.99 美元)或更高方案,且部分功能目前只在美國開放;更重要的是,Gemini 的邏輯是 Google 訂好的,你無法改規則、換 AI 模型、或讓它把摘要寄到 Slack。如果你只想要「開箱即用」又接受訂閱費用,Gemini 夠用;但本課讀者多半需要更高的自訂空間。
Google Apps Script:Google 自家的腳本平台,免費、與 Gmail 原生整合(不用 OAuth 設定),但要寫 JavaScript。對不寫程式的人來說,Apps Script 的門檻比 n8n 高很多——出錯沒有視覺化的節點讓你追,只有一堆看不懂的 error log。本課程帶過即可:如果你有工程師朋友或願意學 JavaScript,Apps Script 是免費的好選擇;但你現在買這堂課的理由是「不想寫程式」,那就繼續走 n8n。
n8n(本課路線):視覺化拖拉節點,不需要寫程式;可以選任何 AI 模型(OpenAI、Gemini、Claude 都行);可以串 400+ 外部服務;流程邏輯完全由你決定。代價是:需要花一點時間做 OAuth 設定,以及如果自架 n8n 伺服器要自行維護。本課接下來全部都在這條路線上。
第一關:拿到 Gmail API 授權(OAuth 設定)
Google 的 OAuth 流程對新手像關卡迷宮。我把它拆成三個舞台,你照著做就好:

建立 Google Cloud 專案,啟用 Gmail API
到 console.cloud.google.com 登入。頂部導覽列點「選取專案」→「新增專案」:
- 專案名稱:隨便取,例如
n8n-gmail-auto - 點「建立」,等個幾秒鐘
建好後,左上確認你已選到這個新專案,然後:
- 左側選單選「APIs 和服務」→「程式庫」
- 搜尋
Gmail API,點進去按「啟用」
Gmail API 啟用後,左側選單點「OAuth 同意畫面」:
- 使用者類型選「外部」(External),按「建立」
- 應用程式名稱:填
n8n Gmail 自動化 - 使用者支援電子郵件:填你的 Gmail
- 授權網域:先跳過,滾到底部按「儲存並繼續」
- 範圍(Scopes):按「新增或移除範圍」,搜尋
gmail,勾選https://mail.google.com/(完整 Gmail 存取),按「更新」→「儲存並繼續」 - 測試使用者:新增你自己的 Gmail 帳號→「儲存並繼續」
建立 OAuth 用戶端 ID
繼續在 Google Cloud Console:
- 左側選「憑證」(Credentials)
- 上方點「+ 建立憑證」→「OAuth 用戶端 ID」
- 應用程式類型:選「網頁應用程式」(Web application)
- 名稱:填
n8n就好
先不要填「已授權的重新導向 URI」,按「建立」,把跳出來的對話框先留著,待用。你會看到:
- 用戶端 ID(Client ID):長串英數字,結尾
.apps.googleusercontent.com - 用戶端密碼(Client Secret):另一串較短的字串
把這兩個複製下來備用。
在 n8n 建立憑證,取得 Redirect URI
打開 n8n,點左側「憑證」(Credentials)→「新增憑證」,搜尋「Gmail OAuth2」:
- 將剛才的 Client ID 和 Client Secret 貼入對應欄位
- n8n 畫面下方會顯示一串 OAuth Redirect URL,長這樣:
https://你的n8n網址/rest/oauth2-credential/callback
複製這串 URL,回到 Google Cloud Console 的憑證頁面:
- 找到剛建的 OAuth 用戶端,點右側鉛筆圖示編輯
- 「已授權的重新導向 URI」區塊按「+ 新增 URI」
- 貼入剛才複製的 n8n Redirect URL,按「儲存」
回到 n8n,點「Sign in with Google」按鈕,完成 Google 授權。看到「Connection tested successfully」代表成功。
OAuth 憑證設定好後,接下來建的三條流程都選「Gmail OAuth2」這組憑證,不用再設定一次。
流程①:AI 智慧貼標籤
每封新信進來,流程立刻分析並貼上對應標籤。AI 判斷邏輯與 Prompt 設計如下:

在 Gmail 先建好四個標籤
打開 Gmail 網頁版,左側找「新增標籤」(或「管理標籤」→「建立新標籤」):
建立這四個標籤:
AI/重要AI/帳單AI/訂閱AI/促銷
加上 AI/ 前綴是為了讓它們歸在同一個資料夾群組,整齊好管理。
建立 n8n 工作流:Gmail Trigger → AI 節點 → 貼標籤
在 n8n 新增工作流,加入以下節點:
節點 1:Gmail Trigger
- Credential:選剛設定好的 Gmail OAuth2
- Event:選「Message Received」
- Simplify Output:開啟(回傳簡化欄位即可)
這個節點預設每分鐘輪詢一次 Gmail 新信。n8n Cloud 版也支援 Webhook 模式,延遲更低。
節點 2:AI Agent(或 Basic LLM Chain)
加入一個「Basic LLM Chain」節點,選你的 AI 服務(OpenAI、Google Gemini 都可)。
System Prompt 填入:
你是 Gmail 郵件分類助理。
根據以下信件資訊判斷分類,只回傳一個標籤名稱,不要解釋,不要加標點符號:
寄件人: {{ $json.from }}
主旨: {{ $json.subject }}
摘要: {{ $json.snippet }}
可選標籤(只選其一):
- AI/重要(需要本人回覆或決策:客戶詢問、老闆指派、合約審閱等)
- AI/帳單(繳費、帳單、發票、扣款通知)
- AI/訂閱(電子報、部落格更新、配送通知、你主動訂閱的內容)
- AI/促銷(廣告、折扣、行銷信、陌生開發)
User Message 填:
請分類這封信件
節點 3:Gmail 節點 → 加標籤
加入「Gmail」節點:
- Resource:Message
- Operation:Add Label
- Message ID:
{{ $('Gmail Trigger').item.json.id }} - Label Names:使用表達式
{{ $json.text.trim() }}(抓 AI 節點回傳的文字)
三個節點串好後,點右上角「啟動」,工作流開始偵測新信。
流程②:晨間摘要信
每天早上定時執行,把過去 24 小時的信件摘要好送到你的信箱。
Schedule Trigger:設定早上 8 點執行
新增工作流,第一個節點選「Schedule Trigger」:
- Mode:Cron
- Cron Expression:
0 8 * * *(每天早上 08:00) - 時區:Asia/Taipei
Gmail 節點:抓過去 24 小時的信
加入「Gmail」節點:
- Resource:Message
- Operation:Get Many
- Return All:先關掉,Limit 填
50(大多數人一天不超過這數量) - 勾選「Filters」區塊,展開後填:
- Search:
newer_than:1d(Gmail 原生搜尋語法,抓最新一天的信)
- Search:
Loop Over Items + AI 摘要每封信
加入「Loop Over Items」節點(確保每封信單獨送給 AI,不超過 Token 限制)。
Loop 裡面加入「Basic LLM Chain」:
System Prompt:
你是郵件摘要助理,用繁體中文寫作。
請把以下這封信摘要成 1-2 句話,保留:
1. 寄件人是誰(或哪間公司)
2. 核心內容或需要採取的行動
3. 如果有金額或截止日期要特別標出
格式:【寄件人】摘要內容
User Message:
寄件人: {{ $json.from }}
主旨: {{ $json.subject }}
內容: {{ $json.snippet }}
標籤: {{ $json.labelIds }}
Code 節點:彙整所有摘要
Loop 結束後,加入「Code」節點把所有摘要串成一封信的 HTML 內容:
// 收集所有 Loop 輸出的摘要
const summaries = $input.all();
// 按標籤分組
const groups = {
'重要': [],
'帳單': [],
'訂閱': [],
'促銷': []
};
summaries.forEach(item => {
const text = item.json.text || '';
const labels = JSON.stringify(item.json.labelIds || []);
if (labels.includes('AI/重要')) groups['重要'].push(text);
else if (labels.includes('AI/帳單')) groups['帳單'].push(text);
else if (labels.includes('AI/訂閱')) groups['訂閱'].push(text);
else groups['促銷'].push(text);
});
// 組成 HTML
const today = new Date().toLocaleDateString('zh-TW', {
year: 'numeric', month: 'long', day: 'numeric', weekday: 'long'
});
let html = `<h2>📬 Gmail 晨間摘要 — ${today}</h2>`;
const emojiMap = { '重要': '🔴', '帳單': '💳', '訂閱': '📰', '促銷': '🏷️' };
for (const [cat, items] of Object.entries(groups)) {
if (items.length === 0) continue;
html += `<h3>${emojiMap[cat]} ${cat}(${items.length} 封)</h3><ul>`;
items.forEach(t => { html += `<li>${t}</li>`; });
html += `</ul>`;
}
html += `<hr><p style="color:gray;font-size:12px">由 n8n Gmail 自動化生成 · 如需完整信件請至 Gmail 查看</p>`;
return [{ json: { htmlBody: html, today } }];
Gmail 節點:寄晨間摘要給自己
最後加入「Gmail」節點:
- Resource:Message
- Operation:Send
- To:
你自己的 Gmail 地址 - Subject:
📬 Gmail 晨間摘要 — {{ $json.today }} - Message Type:HTML
- Message:
{{ $json.htmlBody }}
儲存並啟動這條工作流。第一次測試可以先把 Schedule Trigger 換成「Manual Trigger」,按執行看結果。確認格式正確後再換回定時觸發。
流程③:AI 草稿回覆(安全設計)
這條流程的核心設計原則:AI 只存草稿,不自動寄出。你需要親眼看一遍、覺得沒問題才手動按送出。這是保護你和收件人的安全機制。
在 Gmail 建立「待回覆」標籤
到 Gmail 建一個新標籤,名稱:待回覆。
以後你讀信時,覺得這封需要 AI 幫你起草回覆,就手動貼上「待回覆」標籤。這個動作會觸發 n8n 工作流。
Gmail Trigger:偵測「待回覆」標籤
新增工作流,節點選「Gmail Trigger」:
- Event:Label Added
- Label:選「待回覆」
每次你對一封信加上「待回覆」標籤,這個觸發器就會啟動。
取得完整信件內容
加入「Gmail」節點:
- Resource:Message
- Operation:Get
- Message ID:
{{ $json.id }} - Simplify Output:關閉(這次需要取得完整信件內容,包含回覆串)
AI 節點:生成回覆草稿
加入「Basic LLM Chain」:
System Prompt:
你是一位專業的郵件回覆助理,幫助用戶撰寫繁體中文回覆。
請根據以下信件,撰寫一封合適的回覆草稿:
1. 語氣:專業、親切、不過度正式
2. 結構:先回應對方的主要問題/要求,再提出你的立場或下一步行動
3. 長度:5-10 句即可,不要過長
4. 開頭不要用「您好」,改用「Hi [對方姓名]」或「[對方姓名] 你好」
5. 結尾留「[你的名字]」佔位,讓用戶自行替換
只輸出回覆正文,不要加說明。
User Message:
原始信件:
寄件人: {{ $json.from }}
主旨: {{ $json.subject }}
內容:
{{ $json.text || $json.snippet }}
Gmail 節點:存為草稿
加入「Gmail」節點:
- Resource:Draft
- Operation:Create
- To:
{{ $('Gmail Trigger').item.json.from }}(回覆給原寄件人) - Subject:
Re: {{ $('Gmail Trigger').item.json.subject }} - Message Type:Text
- Message:
{{ $json.text }}(AI 生成的草稿文字)
流程結束,到 Gmail 的「草稿」資料夾,你就會看到 AI 幫你備好的回覆草稿。讀一遍、改一改、按送出。
隱私邊界:哪些信別送 AI
三條流程都會把信件內容傳送給 AI API。在建立流程前,先搞清楚你的邊界在哪:

實務做法:
- 流程①貼標籤:System Prompt 裡只用
$json.from、$json.subject、$json.snippet(50字摘要),不傳完整信件全文。即便是敏感信,只傳這三個欄位風險也低很多 - 流程②晨間摘要:在 Gmail 搜尋條件加上
-label:AI/重要(如果你把重要的機密信分開管理),只摘要訂閱/帳單類 - 流程③草稿回覆:你有控制權——只有你主動貼「待回覆」標籤才觸發,敏感信件不貼這個標籤就好
n8n Cloud 和主流 AI API(OpenAI、Gemini)都走 HTTPS 加密,流量不是明文。但 API 呼叫的資料進入第三方服務,終究有隱私考量,醫療記錄、法律文件、公司 NDA 保護的內容建議完全排除在自動化流程之外。
常見坑
坑 1:redirect_uri_mismatch——OAuth 連不上
這是 Gmail 串接最常見的錯誤,錯誤訊息:
Error 400: redirect_uri_mismatch
The redirect URI in the request did not match a registered redirect URI.
根因:Google Cloud Console 裡填的 Redirect URI 和 n8n 實際使用的不完全一樣。檢查清單:
- 從 n8n 憑證頁面複製,不要手打
- 確認 n8n 是用 https 還是 http(本地測試通常是 http)
- 結尾有沒有多一個
/ - 如果 n8n 有反向代理(Nginx/Caddy),確認外部 URL 和 n8n 的
WEBHOOK_URL環境變數一致
坑 2:Gmail API 沒啟用,收到 403 錯誤
Request had insufficient authentication scopes.
(或)
Access Not Configured. Gmail API has not been used in project...
回到 Google Cloud Console → APIs 和服務 → 程式庫,搜尋 Gmail API,確認狀態是「已啟用」。如果忘記啟用 API,即便 OAuth 設定正確,呼叫也會被拒。
坑 3:Token 七天後自動失效
OAuth 同意畫面在「測試中」(Testing)狀態時,Google 核發的 access token 和 refresh token 只有 7 天有效期。七天到了,n8n 的所有 Gmail 流程都會突然中斷,日誌出現:
Token has been expired or revoked.
有兩個解法:
- 短期做法:回 n8n 憑證頁重新點「Sign in with Google」重新授權,再撐七天。適合還在測試階段
- 長期做法:回 Google Cloud Console → OAuth 同意畫面,把發布狀態從「測試中」改為「正式版」(Production)。正式版狀態下 refresh token 不會過期。注意:切正式版後 Google 可能要求你填更多同意畫面資訊,如果你只是個人使用不打算上架 Google Marketplace,確認要切換前先讀清楚規定
坑 4:Gmail Get Many 抓不到信,回傳空陣列
晨間摘要跑完 Gmail 節點,結果回來的是空的。常見原因:
- 搜尋語法錯誤:例如
newer_than: 1d(冒號後面加了空格),Gmail API 不接受這種格式,要寫newer_than:1d - 時區問題:n8n Schedule Trigger 是 UTC 時間,如果你填
0 8 * * *但 n8n Server 在 UTC 時區,台灣時間其實是下午 4 點才執行。解法:設定 n8n 的 Schedule Trigger 時區為Asia/Taipei,或把時間改成 UTC0 0 * * *(台灣時間早上 8 點) - Gmail API Quota 耗盡:Gmail API 免費版每天有 quota 上限,大量操作可能觸發。可到 Cloud Console → APIs & Services → Quotas 查看用量
坑 5:AI 回傳的標籤名稱對不上 Gmail 標籤
「加標籤」節點噴出:
Label not found: AI/重要
原因:AI 節點回傳了 重要,但 Gmail 標籤名稱是 AI/重要。解法:Prompt 裡寫清楚回傳完整標籤名稱包含前綴(AI/重要、AI/帳單),並在 Prompt 結尾補上一句:「只能從上面四個選項中選一個,不要改動格式」。或在「加標籤」節點之前加一個「Set」節點,用 switch 邏輯把 AI 的輸出標準化。
作業
- 必做:完成 OAuth 設定,讓 n8n 的 Gmail 節點顯示「Connection tested successfully」——這是本課所有流程的地基。
- 必做:把流程①(AI 貼標籤)跑起來,對著你的信箱實際觀察至少 10 封信的分類結果。有分類錯誤就回去調整 Prompt 的規則描述。
- 必做:把流程②(晨間摘要)先用 Manual Trigger 測試一次,確認摘要信格式正確、內容可讀,再換成定時觸發。
- 選做:把流程③(AI 草稿回覆)建好,找一封實際工作信貼上「待回覆」標籤測試。觀察 AI 生成的草稿是否符合你的語氣,如果差距大,回去修改 System Prompt 裡的語氣描述。
下一課預告
Gmail 整理好了,下一個痛點是:表單填完之後呢?Google 表單每天收到的業務詢問、客戶反饋、活動報名,進了 Sheets 以後你還要手動整理報表——這件事其實可以消失。第 4 課「Sheets 自動化:表單進來,報表自己長好」,我們用 n8n 串接 Google Sheets,做到表單資料進來自動分類、圖表自動更新、例外情況自動發 Gmail 通知。你的 Sheets 從此不是死資料倉庫,是會自己工作的動態報表。