Google Gmail API 與 Calendar API 申請教學

從建立 Google Cloud 專案、啟用 API、設定 OAuth 同意畫面,到取得憑證與測試使用者授權 —— 本教學的每一步皆於 2026 年 7 月在 Google Cloud 控制台實際操作驗證,示意圖依真實畫面重繪。

實測日期:2026-07 介面語言:繁體中文 難度:入門 費用:免費

目錄

  1. 事前準備
  2. 建立 Google Cloud 專案
  3. 啟用 Gmail API
  4. 啟用 Google Calendar API
  5. 設定 OAuth 同意畫面(Google 驗證平台)
  6. 建立 OAuth 用戶端 ID(憑證)
  7. 設定資料存取權(Scopes)
  8. 新增測試使用者
  9. 開始呼叫 API(Python 範例)
  10. 常見問題
0

事前準備

你只需要一個 Google 帳號(一般 Gmail 帳號即可)。整個流程不需要綁定信用卡:Gmail API 與 Calendar API 都有免費配額,個人開發綽綽有餘。

建立專案
啟用 2 個 API
OAuth 同意畫面
建立憑證
Scopes + 測試使用者
寫程式呼叫
為什麼需要這些步驟?Gmail 和行事曆是「使用者的私人資料」,Google 要求應用程式透過 OAuth 2.0 取得使用者同意後才能存取。所以除了打開 API,還要設定「同意畫面」和「授權範圍」。
1

建立 Google Cloud 專案

開啟 https://console.cloud.google.com/projectcreate(或在控制台上方的專案選單點「新增專案」)。

console.cloud.google.com/projectcreate
新增專案
api-course-demo
專案 ID:api-course-demo。ID 設定後即無法變更。編輯
無組織 瀏覽
選取要建立這項資源的組織或資料夾
建立取消
▲ 依實際畫面重繪:「新增專案」頁。輸入專案名稱後按「建立」。
  1. 在「專案名稱」輸入好記的名稱,例如 api-course-demo(名稱下方會自動產生專案 ID,之後無法更改)。
  2. 個人帳號「父項資源」保持「無組織」即可。
  3. 建立。約 10 秒後右上角鈴鐺會出現「建立專案:api-course-demo ✔」的通知。
  4. 在通知中點「選取專案」,或用上方專案下拉選單切換到新專案。之後所有步驟都要確認左上角顯示的是這個專案。
注意免費帳號預設最多 10~12 個專案配額。如果按「建立」沒反應,先刪除舊專案或申請提高配額。
2

啟用 Gmail API

左上選單 ☰ → API 和服務程式庫,搜尋「Gmail」;或直接開啟 https://console.cloud.google.com/apis/library/gmail.googleapis.com

console.cloud.google.com/apis/library/gmail.googleapis.com?project=api-course-demo
🔽 api-course-demo
✉️
Gmail API
Google Enterprise API · View and manage Gmail mailbox data.
啟用試用這個 API
▲ 依實際畫面重繪:Gmail API 產品頁,按藍色「啟用」。

按下 啟用 後會轉圈約 5~10 秒,完成後自動跳到「API/服務詳細資料」頁,狀態顯示 已啟用。頁面上方會提示「您可能需要建立憑證,才能從自己的應用程式呼叫這個 API」——憑證我們在步驟 5 建立。

3

啟用 Google Calendar API

同樣方式,在程式庫搜尋「Calendar」,選擇 Google Calendar API;或直接開啟 https://console.cloud.google.com/apis/library/calendar-json.googleapis.com

console.cloud.google.com/apis/library/calendar-json.googleapis.com?project=api-course-demo
🔽 api-course-demo
📅
Google Calendar API
Google Enterprise API · Manage calendars and events in Google Calendar.
啟用試用這個 API
▲ 依實際畫面重繪:Google Calendar API 產品頁(服務名稱 calendar-json.googleapis.com)。

啟用,狀態變成「已啟用」即完成。到此專案已可使用兩個 API,接著處理授權。

4

設定 OAuth 同意畫面(Google 驗證平台)

左側選單 API 和服務OAuth 同意畫面,會進入「Google Auth Platform」。新專案會顯示「尚未設定 Google 驗證平台」,按 開始

console.cloud.google.com/auth/overview?project=api-course-demo
🖼️
尚未設定 Google 驗證平台
開始設定應用程式身分,並管理用於呼叫 Google API 和「使用 Google 帳戶登入」的憑證。
開始
▲ 依實際畫面重繪:OAuth 總覽初始頁。

設定精靈共 4 個步驟(實測畫面依序如下):

  1. 應用程式資訊:「應用程式名稱」輸入例如 API Course Demo(這是使用者在授權畫面看到的名稱);「使用者支援電子郵件」下拉選你自己的 Gmail。按「下一步」。
  2. 目標對象:選 外部。個人 Gmail 帳號沒有 Workspace 組織,只能選外部;應用程式會先以「測試模式」推出,只有測試使用者清單中的人可以用。按「下一步」。
  3. 聯絡資訊:輸入你的電子郵件(Google 專案異動通知用)。按「下一步」。
  4. 完成:勾選「我同意《Google API 服務:使用者資料政策》」→ 按「繼續」→ 按 建立。畫面底部出現「OAuth 設定建立完成!」。
console.cloud.google.com/auth/overview/create?project=api-course-demo
✔ 應用程式資訊  ✔ 目標對象  ✔ 聯絡資訊  ❹ 完成
我同意《Google API 服務:使用者資料政策》。
繼續
建立取消
▲ 依實際畫面重繪:4 步驟精靈的最後一步。
5

建立 OAuth 用戶端 ID(憑證)

Google Auth Platform 左側選單 → 用戶端建立用戶端(或 API 和服務 → 憑證 → 建立憑證 → OAuth 用戶端 ID)。

console.cloud.google.com/auth/clients/create?project=api-course-demo
建立 OAuth 用戶端 ID
電腦版應用程式 ▾
選項:網頁應用程式 / Android / Chrome 擴充功能 / iOS / 電視和受限制的輸入裝置 / 電腦版應用程式
電腦用戶端 1
注意:設定可能需要 5 分鐘至數小時才會生效
建立取消
▲ 依實際畫面重繪:寫本機腳本/課程練習選「電腦版應用程式」最簡單。

建立 後跳出「OAuth 用戶端已建立」視窗:

console.cloud.google.com/auth/clients — 對話框
OAuth 用戶端已建立
您隨時可以在 Google Auth Platform 的「用戶端」分頁找到用戶端 ID。
ⓘ 只有 OAuth 同意畫面中列出的測試使用者具備 OAuth 存取權限
用戶端 ID1454707•••••-9t3e7t•••••••••••••.apps.googleusercontent.com 📋
⬇ 下載 JSON
確定
▲ 依實際畫面重繪:務必點「下載 JSON」,把檔案存成 credentials.json。
重要:保管好 JSON 憑證檔下載的 client_secret_xxx.json 內含 client_id 與 client_secret,等同你 App 的鑰匙。請改名為 credentials.json 放進專案資料夾,並加入 .gitignore,絕不要上傳到公開的 GitHub。
6

設定資料存取權(Scopes)

Google Auth Platform → 資料存取權新增或移除範圍。右側會滑出「更新所選範圍」面板,列出已啟用 API 的所有範圍(這就是為什麼要先做步驟 2、3)。

  1. 在「篩選條件」輸入 gmail.send 按 Enter,勾選 Gmail API 的 .../auth/gmail.send(以您的名義傳送電子郵件)。
  2. 清除篩選,再輸入 calendar.events,勾選 Google Calendar API 的 .../auth/calendar.events(查看及編輯所有日曆上的活動)。
  3. 捲到面板底部按 更新,回到頁面後再按 Save
console.cloud.google.com/auth/scopes?project=api-course-demo
🔒 您的機密範圍
API範圍使用者可以看見的說明
Gmail API.../auth/gmail.send以您的名義傳送電子郵件 🗑
Google Calendar API.../auth/calendar.events查看及編輯所有日曆上的活動 🗑
Save捨棄變更
▲ 依實際畫面重繪:兩個範圍都屬於「機密範圍」,在測試模式下可直接使用。
Scope 挑選原則:夠用就好常用選項——只讀信:gmail.readonly;只寄信:gmail.send;完整信箱:https://mail.google.com/(受限制範圍,正式上線需安全審查);行事曆讀寫:calendar.events;行事曆唯讀:calendar.events.readonly。範圍越小,審查越簡單、風險越低。
7

新增測試使用者

應用程式處於「測試中」狀態時,只有測試使用者清單裡的帳號能完成 OAuth 授權。Google Auth Platform → 目標對象 → 測試使用者區塊按 + Add users

console.cloud.google.com/auth/audience?project=api-course-demo
測試使用者
1 位使用者(1 位測試使用者,0 位其他使用者)/ 上限為 100 位
+ Add users
使用者資訊
your-account@gmail.com 🗑
▲ 依實際畫面重繪:輸入你自己的 Gmail 後按「Save」,清單出現該帳號即成功。

輸入你要拿來測試的 Gmail(通常就是自己的帳號),按 Save。上限 100 位。

要正式給所有人用?「目標對象」頁上方有「發布應用程式」按鈕可切換為正式版。使用機密/受限制範圍的應用程式需要通過 Google 驗證(數天~數週)。自用或課程練習停留在測試模式即可,唯一小缺點是 refresh token 7 天會過期,重新授權一次即可。
8

開始呼叫 API(Python 範例)

把步驟 5 下載的 credentials.json 放到程式同層資料夾,安裝套件:

pip install google-auth-oauthlib google-api-python-client

第一次執行會自動打開瀏覽器,用測試使用者帳號登入並同意授權(畫面會顯示「Google 尚未驗證這個應用程式」,點「繼續」即可,因為是你自己的 App)。授權後 token 會存在本機,之後不必重新登入。

# demo.py — 寄一封信 + 建一個行事曆活動
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
import base64, os.path, pickle
from email.mime.text import MIMEText

SCOPES = [
    "https://www.googleapis.com/auth/gmail.send",
    "https://www.googleapis.com/auth/calendar.events",
]

# --- OAuth 授權(第一次會開瀏覽器) ---
creds = None
if os.path.exists("token.pickle"):
    with open("token.pickle", "rb") as f:
        creds = pickle.load(f)
if not creds or not creds.valid:
    flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)
    creds = flow.run_local_server(port=0)
    with open("token.pickle", "wb") as f:
        pickle.dump(creds, f)

# --- Gmail:寄信 ---
gmail = build("gmail", "v1", credentials=creds)
msg = MIMEText("哈囉,這封信是用 Gmail API 寄出的!")
msg["to"] = "someone@example.com"
msg["subject"] = "Gmail API 測試"
raw = base64.urlsafe_b64encode(msg.as_bytes()).decode()
gmail.users().messages().send(userId="me", body={"raw": raw}).execute()
print("信寄出去了!")

# --- Calendar:建立活動 ---
cal = build("calendar", "v3", credentials=creds)
event = {
    "summary": "API 課程練習",
    "start": {"dateTime": "2026-07-20T10:00:00+08:00"},
    "end":   {"dateTime": "2026-07-20T11:00:00+08:00"},
}
created = cal.events().insert(calendarId="primary", body=event).execute()
print("活動建好了:", created.get("htmlLink"))
9

常見問題

Q1:授權時出現「拒絕存取」錯誤 (403: access_denied)?

登入的帳號不在測試使用者清單。回到步驟 7 把該帳號加進去。

Q2:出現「Google 尚未驗證這個應用程式」警告?

測試模式的正常現象。點「繼續」(有時藏在「進階」連結裡)即可,因為這是你自己建立的應用程式。

Q3:過幾天 token 失效、要求重新登入?

測試模式的 refresh token 有效期 7 天。刪掉 token.pickle 重新授權,或將應用程式發布為正式版。

Q4:找不到「OAuth 同意畫面」選單?

2024 年後 Google 把它整合進「Google Auth Platform」。路徑:API 和服務 → OAuth 同意畫面,或直接開 console.cloud.google.com/auth/overview

Q5:API 已啟用,程式卻回報 API not enabled?

多半是專案選錯了。確認控制台左上角專案名稱,以及 credentials.json 是從同一個專案下載的。