LoginSignup
10
11

More than 5 years have passed since last update.

【PHP】Gmail APIでメールを取得する

Posted at

はじめに

Gmail APIのリファレンスが全部英語なので読むのに時間がかかり、苦労したので日本語メモ用に残しておきます:open_hands:

公式ドキュメント

Gmail API
Class Google_Service_Gmail_Message 
↑いろんなクラスがあるので、欲しいメソッドが既に存在しているかもしれません。まずは欲しい機能が実装済みでないか調べましょう。

前準備

  • PHP5.4 以上
  • Composer が利用可能である
  • Gmailが使えるGoogleアカウントがある

クイックスタート

1. [ENABLE THE GMAIL API] ボタンをクリック

スクリーンショット 2019-02-20 16.24.29.png

クリックすると以下のようなウィンドウがでてくるので、 [DOWNLOAD CLIENT CONFIGURATION]
というボタンをクリック
スクリーンショット 2019-02-20 16.42.57.png

credentials.jsonというファイルがダウンロードされるので、作業ディレクトリにファイルを移動する。

2. Google Clientライブラリをインストール

$ composer require google/apiclient:^2.0

3. サンプル作成

4. サンプル実行 && アカウント認証

$ php quickstart.php 

4-a. ターミナルにリンク先が表示されるので、コピペしてブラウザで表示
4-b. 画面に従いアカウント認証をする
4-c. 認証コードが表示されるので、コピーする
スクリーンショット 2019-02-20 16.55.27.png
4-d. ターミナルに貼り付け、Enter

5. 認証成功! ラベル一覧が表示されます

以降は、作業ディレクトリに追加されているtoken.jsonを読み込んで認証するので、いちいちGoogleアカウントの認証をする必要はありません。
試しにphp quickstart.phpと再度実行するとすぐにメールのラベル一覧が表示されます。

6. メール一覧を取得する

quickstart.php
// さっき認証に使用した 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);

でデコードできます。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11