はじめに
Gmail APIのリファレンスが全部英語なので読むのに時間がかかり、苦労したので日本語メモ用に残しておきます
公式ドキュメント
Gmail API
Class Google_Service_Gmail_Message
↑いろんなクラスがあるので、欲しいメソッドが既に存在しているかもしれません。まずは欲しい機能が実装済みでないか調べましょう。
前準備
- PHP5.4 以上
- Composer が利用可能である
- Gmailが使えるGoogleアカウントがある
クイックスタート
1. [ENABLE THE GMAIL API] ボタンをクリック

クリックすると以下のようなウィンドウがでてくるので、 [DOWNLOAD CLIENT CONFIGURATION]
というボタンをクリック
credentials.json
というファイルがダウンロードされるので、作業ディレクトリにファイルを移動する。
2. Google Clientライブラリをインストール
$ composer require google/apiclient:^2.0
3. サンプル作成
- 作業ディレクトリに
quickstart.php
というファイルを作成 - そのファイルにgithubのサンプルコードをコピペ → https://github.com/gsuitedevs/php-samples/blob/master/gmail/quickstart/quickstart.php
4. サンプル実行 && アカウント認証
$ php quickstart.php
4-a. ターミナルにリンク先が表示されるので、コピペしてブラウザで表示
4-b. 画面に従いアカウント認証をする
4-c. 認証コードが表示されるので、コピーする
4-d. ターミナルに貼り付け、Enter
5. 認証成功! ラベル一覧が表示されます
以降は、作業ディレクトリに追加されているtoken.json
を読み込んで認証するので、いちいちGoogleアカウントの認証をする必要はありません。
試しにphp quickstart.php
と再度実行するとすぐにメールのラベル一覧が表示されます。
6. メール一覧を取得する
// さっき認証に使用した quickstart.php に追記します。
// 検索条件を追加することができます。
$optParams = array(
'maxResults' => '最大取得件数',
'labelIds' => 'ラベルのID', // ラベルのidはlistUsersLabels()で取得可能。
'pageToken' => 'ページトークン',
// Gmailのメール検索時の形式で条件を指定できます。
'q' => 'from:someuser@example.com after:2018-02-20',
);
// 条件に当てはまるメールの一覧を取得します。
$messages = $service->users_messages->listUsersMessages($user, $optParams);
// メッセージIDからメールの内容を取得します。
foreach($messages->getMessages as $message) {
$message_id = $message->getID();
$message_contents = $service->users_messages->get($user, $message_id);
print_r($message_contents);
}
7.メモ
メールの本文は上記のコードだと $message_contents['payload']['body']['data']
にありますが、URLセーフ処理がかけられているためデコードする必要があります。
$body = $message_contents['payload']['body']['data'];
$body = str_replace(array('-', '_'), array('+', '/'), $body);
$body = base64_decode($body);
でデコードできます。