ハマログ

株式会社イーツー・インフォの社員ブログ

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

はじめに
システムのエラー通知をGmailに送ったあと、PHPのプログラムでメールを取得してChatwork API経由でChatworkに送る、ということをやっています。

さいしょはimap_open関数でやっていました。やり方は何年か前に「PHPでIMAP接続してメールを取得する 」に書きました。
とくに問題なく動いていたのですが、先日サーバ自体がお亡くなりになりまして、GMO VPSからAWSにプログラムを移したところ、Amazon Linux2にphp-imapをうまくインストールすることができなかったので、Gmail API経由で取得する実装方法に変更しました。
ステップ1 APIの有効化
APIを有効化します。Google Cloud Consoleから有効化できるんだけどよく迷子になるので、下のリンクからならボタン1回クリックで有効化できます。
https://developers.google.com/gmail/api/quickstart/php
ボタンをおします
有効になりました。クライアント設定ファイルをダウンロードしておきましょう。JSONです。
ステップ2 プログラムの作成
GoogleのPHPクライアントをcomposerで導入します。ちなみにPHPクライアントはまだベータ版とのことです。
composer require google/apiclient:^2.0
PHP Quickstartのページにあるサンプルプログラムを動かしてみます。
途中、Verification Codeの入力待ちになり、URLが表示されます。ブラウザでURLにアクセスして、表示されたコードを画面に入力します。
Open the following link in your browser:
https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=999999-999999&redirect_uri=以下略
Enter verification code:
IT WORKED!(ってドキュメントに書いてあった)
ここまでで認証は完了です。続いてメールを取得します。

取得例:未読メールを20件取得
        $optParams = array(
            'maxResults' => '20',
            'labelIds' => 'INBOX',
            'q' => 'is:unread',
        );

        $messages = $service->users_messages->listUsersMessages($user, $optParams);
取得して必要な処理を行ったあとに、メールを既読状態に変更しました。
            // メールを既読にする
            $mods = new Google_Service_Gmail_ModifyMessageRequest();
            $mods->setRemoveLabelIds(['UNREAD']);
            $service->users_messages->modify('me', $messageId, $mods);
GMAIL_MODIFYスコープが必要です。
        $client->setScopes([Google_Service_Gmail::GMAIL_READONLY, Google_Service_Gmail::GMAIL_MODIFY]);
スコープの一覧はこちら
https://developers.google.com/gmail/api/auth/scopes
これで、メールの読み取り・読み取り済みメールの既読化ができました。

APIの情報が少なくてちょっと苦労しました!
APIGmailGoogleIMAPPHPメール

  kaneko tomo   2019年6月14日


関連記事

第13回Quesに参加してきた

半年に1回あるこのイベントがまたやってきた! QAエンジニアの活性化を目的とした…

EC-CUBEの開発者向けインストール方法&初期設定

通常のEC-CUBEのインストール方法は「EC-CUBEの公式サイトからZIPを…

AWS IoT ボタンでチャットワークに通知する

AWS Iot エンタープライズボタンを購入したのが7月・・・なにもしないまま9…


← 前の投稿

次の投稿 →