Gmail APIでシステムとGmail(G Suite)を連携【調査編】
POP3とSMTPを使うのは面白くないので、API経由でGmailを利用したらメールを削除することなくシステムと連携できると思い、試したときの覚書。
公式サイトを参考に
目次
- APIの使用制限
- システム用アカウントをGoogle Apps(G Suite)に追加
- Server-to-Serverのサービスアカウントを作成
- PHPサンプルを試す
- ウェブアプリケーションのOAuth2.0で認証
1.APIの使用制限
APIの使用制限がある。1日10億Quota Unit。メソッドごとに消費ユニットが違う。例えばメール送信は100ユニット消費する。
一秒間に250ユニットの制限がある。同時に3つ以上送信しようとすると制限に引っかかる。詳しくは公式サイトで。
メール送信はローカルのPostfixに任せた方がいいかもしれない。
クライアントライブラリが未成熟(?)
PHPはベータ版
Node.jsはまだアルファ版
- Node.js Quickstart | Gmail API | Google Developers
- GitHub | google/google-api-nodejs-client: Google's officially supported Node.js client library for accessing Google APIs.
2.システム用アカウントをGoogle Apps(G Suite)に追加
やろうと思っていることの概要。
システム専用のアカウントを作って、そのアカウント宛てに届いたメールを順次処理していく。
処理が終わったら「既読」ラベルを付けてアーカイブ。
Node.jsはアルファ版なのでWordPressのプラグインとしてPHPで開発することにした。
3.Server-to-Serverのサービスアカウントを作成
システム専用アカウントでGoogle Developer Consoleにアクセスして、API Keyを生成する。
公式サイトを参考に
簡単な手順
- Gmail APIを有効にする(プロジェクトの作成)
- 認証情報を生成
「役割」はよく分からないので「ログ書き込み」を選択 - キー情報のファイルがダウンロードされる
4.PHPサンプルを試す
GitHubからPHP用のクライアントライブラリをダウンロードする。
Releasesに置いてあるのは依存関係も含んでいるので、そのまま解凍すれば使える。
今のバージョンはv2.1.1
公式サイトのサンプルをGmail API用に変更して実行しても「アクセストークンがない」と怒られる。
"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method."
クライアントライブラリが自動でアクセストークンを取得すると思ったら違った。
よく分からないので「サービスアカウントキー」での認証は諦め。
前にやったことのある「ウェブアプリケーション」の認証方式で実装することにした。
5.ウェブアプリケーションのOAuth2.0で認証
公式サイトと前の記事を参考に。あとクライアントライブラリの仕様が変わってる。
- Using OAuth 2.0 for Web Server Applications | API Client Library for PHP (Beta) | Google Developers
- SE奮闘記: Picasa Web Albums Data API v2 + PHPでアルバム一覧取得(OAuth2)
- GitHub | google-api-php-client/UPGRADING.md at master · google/google-api-php-client
スコープの設定メモ。
google-api-php-client\vendor\google\apiclient-services\src\Google\Service\Gmail.php
の最初の方にconstされている。
…
部下がこれやろうとしてたら「PHPMailerを使ってPOP3とSMTPでいいじゃん」というのは間違いない。
< Related Posts >