PHPとGmail APIでメールを取得する
はじめに
システムのエラー通知をGmailに送ったあと、PHPのプログラムでメールを取得してChatwork API経由でChatworkに送る、ということをやっています。
さいしょはimap_open関数でやっていました。やり方は何年か前に「PHPでIMAP接続してメールを取得する 」に書きました。
さいしょは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
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件取得
取得例:未読メールを20件取得
$optParams = array( 'maxResults' => '20', 'labelIds' => 'INBOX', 'q' => 'is:unread', ); $messages = $service->users_messages->listUsersMessages($user, $optParams);
取得して必要な処理を行ったあとに、メールを既読状態に変更しました。
https://developers.google.com/gmail/api/auth/scopes
// メールを既読にする $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の情報が少なくてちょっと苦労しました!
APIの情報が少なくてちょっと苦労しました!