精華筆記

· @aihub.tw

Google 全家桶自動化

Gmail 自動化:每天早上只看一封摘要信

Gmail 自動化:每天早上只看一封摘要信

你打開 Gmail,收件匣顯示 247 封未讀。你在心裡默默排序:哪封是真的要緊的?哪封可以等?哪封根本不用看?這個篩選過程耗掉你每天早上最清醒的 20 分鐘——還沒開始工作,注意力已經被瓜分完了。

這堂課用 n8n 把這件事交給機器做。你要建三條流程:AI 自動替每封新信貼上分類標籤、每天早上八點寄一封「今日摘要」到你信箱、遇到需要回的信自動準備好草稿等你確認。信件量不變,但你每天只需要讀一封信。

這堂課適合誰 適合:每天信件量超過 30 封、覺得 Gmail 管理費時、想讓 AI 幫你消化郵件的上班族或自由工作者(本課程屬進階應用專區)。需要基礎:會用電腦、有 Gmail 帳號、知道 n8n 基本操作即可。前置課:第 2 課(Drive 自動歸檔)。

這堂學什麼

  • 三種路線對比: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 收件匣改變前後對比:自動化後每天只讀一封晨間摘要

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

本課三大自動化流程架構:貼標籤、晨間摘要、AI草稿

三條流程的信件都走同一組 Gmail OAuth2 憑證,所以設定一次、三條共用。


先搞清楚:三種路線怎麼選

「Gmail 自動化」聽起來是一件事,但實際上有三種不同路線,每種適合不同的人:

Gmail 自動化三種路線比較:Gemini 內建、Apps Script、n8n

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 OAuth 授權三步串接流程

建立 Google Cloud 專案,啟用 Gmail API

console.cloud.google.com 登入。頂部導覽列點「選取專案」→「新增專案」:

  • 專案名稱:隨便取,例如 n8n-gmail-auto
  • 點「建立」,等個幾秒鐘

建好後,左上確認你已選到這個新專案,然後:

  1. 左側選單選「APIs 和服務」→「程式庫」
  2. 搜尋 Gmail API,點進去按「啟用」

Gmail API 啟用後,左側選單點「OAuth 同意畫面」:

  • 使用者類型選「外部」(External),按「建立」
  • 應用程式名稱:填 n8n Gmail 自動化
  • 使用者支援電子郵件:填你的 Gmail
  • 授權網域:先跳過,滾到底部按「儲存並繼續」
  • 範圍(Scopes):按「新增或移除範圍」,搜尋 gmail,勾選 https://mail.google.com/(完整 Gmail 存取),按「更新」→「儲存並繼續」
  • 測試使用者:新增你自己的 Gmail 帳號→「儲存並繼續」
為什麼要加測試使用者 OAuth 同意畫面狀態是「測試中」時,只有加入測試使用者清單的帳號才能授權。你自己的 Gmail 要加進去,不然後面點「Sign in with Google」會被拒絕。

建立 OAuth 用戶端 ID

繼續在 Google Cloud Console:

  1. 左側選「憑證」(Credentials)
  2. 上方點「+ 建立憑證」→「OAuth 用戶端 ID」
  3. 應用程式類型:選「網頁應用程式」(Web application)
  4. 名稱:填 n8n 就好

先不要填「已授權的重新導向 URI」,按「建立」,把跳出來的對話框先留著,待用。你會看到:

  • 用戶端 ID(Client ID):長串英數字,結尾 .apps.googleusercontent.com
  • 用戶端密碼(Client Secret):另一串較短的字串

把這兩個複製下來備用。

在 n8n 建立憑證,取得 Redirect URI

打開 n8n,點左側「憑證」(Credentials)→「新增憑證」,搜尋「Gmail OAuth2」:

  1. 將剛才的 Client IDClient Secret 貼入對應欄位
  2. n8n 畫面下方會顯示一串 OAuth Redirect URL,長這樣:
https://你的n8n網址/rest/oauth2-credential/callback

複製這串 URL,回到 Google Cloud Console 的憑證頁面:

  1. 找到剛建的 OAuth 用戶端,點右側鉛筆圖示編輯
  2. 「已授權的重新導向 URI」區塊按「+ 新增 URI」
  3. 貼入剛才複製的 n8n Redirect URL,按「儲存」

回到 n8n,點「Sign in with Google」按鈕,完成 Google 授權。看到「Connection tested successfully」代表成功。

Redirect URI 必須完全一致 URI 的任何細節不一樣(多個斜線、http vs https、多空格)都會導致 `redirect_uri_mismatch` 錯誤。直接從 n8n 複製貼上,不要手打。

OAuth 憑證設定好後,接下來建的三條流程都選「Gmail OAuth2」這組憑證,不用再設定一次。


流程①:AI 智慧貼標籤

每封新信進來,流程立刻分析並貼上對應標籤。AI 判斷邏輯與 Prompt 設計如下:

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 節點回傳的文字)
表達式抓 AI 回傳值 不同 AI 節點的回傳路徑略有差異。OpenAI Chat Model 回傳在 `$json.text`,Gemini 在 `$json.content`。實際跑一次,觀察節點輸出的欄位名稱再填。

三個節點串好後,點右上角「啟動」,工作流開始偵測新信。


流程②:晨間摘要信

每天早上定時執行,把過去 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 原生搜尋語法,抓最新一天的信)
Gmail 搜尋語法可以組合 `newer_than:1d -from:no-reply -from:noreply` 可以順便排除自動寄送的系統信,減少 AI 處理量。`is:unread newer_than:1d` 只抓未讀信。

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。在建立流程前,先搞清楚你的邊界在哪:

Gmail 自動化隱私邊界:哪些信適合/不適合送 AI

實務做法:

  • 流程①貼標籤: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.

有兩個解法:

  1. 短期做法:回 n8n 憑證頁重新點「Sign in with Google」重新授權,再撐七天。適合還在測試階段
  2. 長期做法:回 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,或把時間改成 UTC 0 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 的輸出標準化。


作業

  1. 必做:完成 OAuth 設定,讓 n8n 的 Gmail 節點顯示「Connection tested successfully」——這是本課所有流程的地基。
  2. 必做:把流程①(AI 貼標籤)跑起來,對著你的信箱實際觀察至少 10 封信的分類結果。有分類錯誤就回去調整 Prompt 的規則描述。
  3. 必做:把流程②(晨間摘要)先用 Manual Trigger 測試一次,確認摘要信格式正確、內容可讀,再換成定時觸發。
  4. 選做:把流程③(AI 草稿回覆)建好,找一封實際工作信貼上「待回覆」標籤測試。觀察 AI 生成的草稿是否符合你的語氣,如果差距大,回去修改 System Prompt 裡的語氣描述。

下一課預告

Gmail 整理好了,下一個痛點是:表單填完之後呢?Google 表單每天收到的業務詢問、客戶反饋、活動報名,進了 Sheets 以後你還要手動整理報表——這件事其實可以消失。第 4 課「Sheets 自動化:表單進來,報表自己長好」,我們用 n8n 串接 Google Sheets,做到表單資料進來自動分類、圖表自動更新、例外情況自動發 Gmail 通知。你的 Sheets 從此不是死資料倉庫,是會自己工作的動態報表。

#Gmail#n8n#Google 自動化#AI 摘要#OAuth#電子郵件

← 回所有文章