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メール https://blog.e2info.co.jp/2019/06/14/php-gmail-api-mail/PHPとGmail APIでメールを取得する