Gmail API 調査

Google API 調査の第 1 回。Gmail API の機能・認証・クォータ・通知・送信を公式ドキュメントで確かめた

📅 作成: 2026-10-25 / 更新: 2026-10-25

概要とリソース

Gmail API は、Gmail のメールボックスの読み取り・送信・整理・設定変更を行う RESTful API。ユーザーの認可を得て Gmail データへ触れる Web アプリの、多くの場面で最適な選択肢とされている。

主なリソース

リソース内容
messages送信者・宛先・件名・本文を持つメール。作成後は内容を変更できない
threads関連するメッセージを会話としてまとめたもの
labels整理用の印。システムラベル (INBOX・TRASH・SPAM 等) は作成・削除できない。ユーザーラベルは作成・変更・削除できる
drafts未送信のメッセージ。内容を差し替えられる。送信すると下書きは消え、SENT ラベルのメッセージができる
historyメールボックスの変更履歴。historyId を起点に差分を取る (「プッシュ通知と送信」を参照)
settings送信元エイリアスと署名・転送・フィルタ・不在通知・S/MIME・POP/IMAP・委任・言語

できること

出典: Gmail API の概要 (Google for Developers)

認証とスコープ

認証情報の種類

種類Gmail での使いどころ
API キー公開データ用。Workspace の大半のデータは OAuth 2.0 が必要で、メールには通常使えない
OAuth 2.0 クライアント IDユーザー所有のメールに触れる主要な手段。同意画面での承認が要る。長期の利用にはリフレッシュトークンを取る
サービスアカウント単独ではユーザーのメールに触れない。ドメイン全体の委任を設定すると組織内のユーザーのメールに触れる。有効化できるのはスーパー管理者だけ

クライアントシークレットは、アプリのコードに平文で含めず安全に保管する。

出典: 認証と認可の概要 (Google for Developers。Workspace API 全般の説明)

スコープ

区分は Non-sensitive / Sensitive / Restricted の 3 段階。要る範囲だけを求める。

スコープ (https://www.googleapis.com/auth/ 以下)区分概要
gmail.labelsNon-sensitiveラベルの閲覧と編集
gmail.addons.current.action.composeNon-sensitiveアドオン操作時に下書きの管理とメール送信
gmail.addons.current.message.actionNon-sensitiveアドオン操作時にメッセージを閲覧
gmail.addons.current.message.metadataSensitiveアドオン実行時にメタデータを閲覧
gmail.addons.current.message.readonlySensitiveアドオン実行時にメッセージを閲覧
gmail.sendSensitiveユーザーの代理でメールを送信
gmail.readonlyRestrictedメールと設定の閲覧
gmail.composeRestricted下書きの管理とメール送信
gmail.insertRestrictedメールボックスへのメール追加
gmail.modifyRestricted閲覧・作成・送信。ゴミ箱を経由した即時の完全削除はできない
gmail.metadataRestrictedラベルやヘッダーの閲覧 (本文は不可)
gmail.settings.basicRestrictedメール設定とフィルタの閲覧・変更
gmail.settings.sharingRestricted重要な設定の管理。管理者用で、ドメイン全体の委任を受けたサービスアカウントのみ
https://mail.google.com/Restricted閲覧・作成・送信に加え完全削除も可能
メールを読むスコープ (gmail.readonly 等) は、本文を読めないはずの gmail.metadata まで含めて Restricted。送信だけなら Sensitive の gmail.send で足りる。https://mail.google.com/ は、即時かつ完全な削除が要るときだけ求めるよう公式が注記している。

出典: Gmail API のスコープ (Google for Developers)

リフレッシュトークンが失効する条件

出典: OAuth 2.0 の概要 (Google for Developers)

制限付きスコープの審査

出典: Restricted scope verification (Google for Developers)

クォータ

上限

種類上限
1 分あたり・プロジェクト1,200,000 ユニット
1 分あたり・ユーザー / プロジェクト6,000 ユニット
1 日あたり・プロジェクト (課金のしきい値)80,000,000 ユニット

メソッドごとの消費 (主なもの)

メソッドユニット
messages.list / messages.modify / threads.list5 (threads.list は 10)
messages.get20 (format が full・raw・html なら 60)
threads.get40 (format が full なら 120)
messages.send / drafts.send100
messages.batchModify / batchDelete50
history.list2
watch100
labels.list / labels.get / getProfile1
本文まで読む messages.get は 60 ユニット。ユーザーあたり毎分 6,000 ユニットなら、本文付きで毎分およそ 100 通が目安になる。ヘッダーだけの取得 (20 ユニット) なら 3 倍。全ユニット表は出典を参照。

出典: Gmail API の使用制限 (Google for Developers)

プッシュ通知と送信

プッシュ通知 (watch)

  1. Cloud Pub/Sub にトピックとサブスクリプションを作り、gmail-api-push@system.gserviceaccount.com にトピックへの publish 権限を与える
  2. users/me/watch にトピックと対象ラベルを指定して呼ぶ。現在の historyId と expiration が返る
  3. 通知の message.data (Base64URL の JSON) にメールアドレスと新しい historyId が入る
  4. 保存しておいた前回の historyId で history.list を呼び、差分を取る。処理後に新しい値を保存する
  5. Webhook は HTTP 200 などで確認応答になる。pull は acknowledge を明示的に呼ぶ。応答が無いと再送される
watch は 7 日以内に再実行しないと、そのユーザーの更新が届かなくなる。公式は 1 日 1 回の再実行を勧める。通知は通常数秒で届くが、まれに遅延・欠落するため、通知が来ないときの備えとして history.list の定期呼び出しを用意する。

出典: Gmail のプッシュ通知 (Google for Developers)

メール送信

1. RFC 2822 準拠の MIME メッセージを作る (添付はマルチパート)
2. base64url でエンコードして、メッセージの raw に入れる
3. messages.send (下書きなら drafts.send) を呼ぶ

出典: メールの送信 (Google for Developers)

メッセージサイズの上限

公式のガイド・リファレンス (送信ガイド、アップロードのガイド、messages.send のリファレンス、クォータ) には、数値の記載が無かった。Google が配布する API 定義 (Discovery ドキュメント) の media upload の maxSize には、次の値がある。

メソッドmaxSize (バイト)換算
messages.send36,700,16035 MiB
drafts.create / drafts.update / drafts.send36,700,16035 MiB
messages.import / messages.insert157,286,400150 MiB
これは media upload (/upload/...) の上限。JSON の raw に base64url で入れる経路に同じ上限が掛かるかは、確かめられていない。base64url で約 3 分の 1 大きくなるため、添付できる実サイズはこれより小さい。

出典: Gmail API の Discovery ドキュメント (Google)