Memo

メモ > 技術 > サービス: Google > Gmail

■Gmail
■一つのGmailアドレスから複数のアドレス(エイリアス)を作る example@gmail.com というメールアドレスがあった場合、 example+test1@gmail.com example+test2@gmail.com のようなアドレス(アカウント名の末尾に「+」と任意の英数字を追加)でもメールを受信できる 何かしらのWebサービスにメールを登録する場合、エイリアスのアドレスを登録すれば、万が一メールアドレスが流出したときに流出元が判る また、テストのために複数のメールアドレスが必要な場合などにも使える Gmailのエイリアス機能とは──複数アドレスを設定する方法と注意点 | アプリオ https://appllio.com/gmail-alias ■ロリポップのメールをGmailで送受信 公式の解説が詳しい Gmailの設定について / メール / マニュアル - レンタルサーバーならロリポップ! https://lolipop.jp/manual/mail/gmail/ ■GmailのSMTPでメール送信 Homestead+Laravel環境で、GmailのSMTPでメールを送信したときのメモ 専用のアプリパスワードを発行し、それを使ってメールを送信できる Laravel側の設定は Laravel.txt も参照 [Laravel5]gmailが送信できない? : ラブサファリ http://lovesafari.blog.jp/archives/21272100.html 以下はアプリパスワードについては触れられていないが、プログラムは参考になる Laravelでメール送信機能を実装する方法【Gmailを利用】 https://manablog.org/laravel-send-email/ 以下、実際に設定したときのメモ アプリパスワードは、二段階認証を設定していないと「お探しの設定はお使いのアカウントでは利用できません。」となって設定できない まずは、以下のページから二段階認証を設定する https://support.google.com/accounts/answer/185839?hl=ja その後、以下のページからアプリパスワードを設定する https://security.google.com/settings/security/apppasswords アプリパスワードの設定画面で2段階認証すると、「アプリ パスワード」というページに遷移した アプリ: 「その他(名前を入力)」を選択 アプリ名: Laravel と入力して「生成」ボタンを押すとアプリパスワードが生成されるので、この値を使用する なお、使い方の文章も以下のように表示される
使い方 設定しようとしているアプリケーションまたはデバイスの Google アカウントの設定画面を開きます。 パスワードを上に表示されている 16 文字のパスワードに置き換えます。 このアプリ パスワードは、通常のパスワードと同様に Google アカウントへの完全なアクセス権が付与されます。 このパスワードを覚えておく必要はないので、メモしたり誰かと共有したりしないでください。
この場合、以下の情報で送信できる HOST: smtp.gmail.com PORT: 465 USERNAME: Gmailのメールアドレス PASSWORD: 生成されたアプリパスワード ENCRYPTION: ssl ■メールの転送 Gmailで受け取ったメールを転送する2つの方法 https://digitor.jp/textbook/gmail-send-on/ Gmail のメールを他のアカウントに自動転送する - Gmail ヘルプ https://support.google.com/mail/answer/10957?hl=ja ■メールを複数のアドレスに転送 Gmailで特定のメールを複数のアドレスに自動転送する方法 | Free Style https://blanche-toile.com/tools/gmail-auto-forwarding ■GmailのAPIでメール取得 PHPとGmail APIでメールを取得する - ハマログ https://blog.e2info.co.jp/2019/06/14/php-gmail-api-mail/ 以下のページから開始 PHP Quickstart | Gmail API | Google Developers https://developers.google.com/gmail/api/quickstart/php ページの中ほどにある「Enable the Gmail API」ボタンをクリック 任意のプロジェクト名を入力し、規約に同意して「NEXT」ボタンをクリック 「Configure your OAuth client」ボタンが表示される 「Web server」を選択する 「Authorized redirect URIs」は http://localhost/~test/mail/google_api/oauth2callback.php とした(手元の環境に合わせて入力する) 登録すると「You're all set!」と表示される 「DOWNLOAD CLIENT CONFIGURATION」ボタンをクリックすると credentials.json をダウンロードできるので、ローカルに保存しておく また以下のように「Client ID」と「Client Secret」も表示されているので確認する
Client ID 1234567890-xxxxxxxxxx.apps.googleusercontent.com Client Secret XXXXXXXXXX
Composerを導入し、以下を実行する
composer require google/apiclient:^2.0
quickstart.php を作成し、紹介されているプログラムを入力する また、同じ場所に oauth2callback.php も作成する。内容は以下にしておく
<?php echo 'code = ' . $_GET['code'] . '<br>'; echo 'scope = ' . $_GET['scope'] . '<br>';
以下を実行する
>php quickstart.php Open the following link in your browser: https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=1... Enter verification code:
コードの入力待ちになるので、表示されたURLにアクセスする Googleにログインしていない場合、ログイン画面が表示されるのでログインする 二段階認証後に表示されるコードを入力して進む 「このアプリは Google で確認されていません」 と表示された 「詳細」リンクをクリックし、表示される「Quickstart(安全ではないページ)に移動」リンクをクリック 「Quickstart への権限の付与」というダイアログが表示され、以下が表示されている
メール メッセージと設定の表示 メール メッセージの表示 メール メッセージの検索 設定(フィルタ、ラベルなど)の表示
「許可」ボタンをクリック
Quickstart に以下を許可しています。 ・メール メッセージと設定の表示 Quickstart を信頼できることを確認 お客様の情報をこのサイトやアプリと共有する場合があります。 Quickstart の利用規約とプライバシー ポリシーで、ユーザーのデータがどのように取り扱われるかをご確認ください。 アクセス権の確認、削除は、Google アカウント https://myaccount.google.com/permissions でいつでも行えます。 リスクの詳細 https://support.google.com/accounts?p=oauth_consent
内容を確認されるので、再度「許可」ボタンをクリック http://localhost/~test/mail/google_api/oauth2callback.php?code=YYYYYYYYYY&scope=https://www.goog... に遷移し、先に作成したプログラムによって画面に以下が表示される コードの入力待ちになっているプロンプトで、codeの値を入力する 以下が表示される
PHP Warning: count(): Parameter must be an array or an object that implements Countable in C:\localhost\home\test\public_html\mail\google_api\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 67 Warning: count(): Parameter must be an array or an object that implements Countable in C:\localhost\home\test\public_html\mail\google_api\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 67 Labels: - CHAT - SENT - INBOX - IMPORTANT - TRASH - DRAFT - SPAM - CATEGORY_FORUMS - CATEGORY_UPDATES - CATEGORY_PERSONAL - CATEGORY_PROMOTIONS - CATEGORY_SOCIAL - STARRED - UNREAD
メールのラベルが一覧表示されているみたい 認証した情報は「token.json」というファイルが作成されて保存されている(アクセストークンや有効期限が保存されている) よって次回は、認証なしにメールのラベルが一覧表示される ※アクセストークンには有効期限が設けられている(1時間くらい?) 期限が切れたら再度「php quickstart.php」を実行する必要がある すんなりトークンが更新されることもあるが、再度Googleへのログインと二段階認証を求められることもある よってプログラムのみで完全自動更新するのは難しそう 一例だが、以下のプログラムによって、ブラウザにGmailのラベルを一覧表示できる
<?php if (version_compare(PHP_VERSION, '7.2.0', '>=')) { error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING); } require __DIR__ . '/vendor/autoload.php'; $client = getClient(); $service = new Google_Service_Gmail($client); $user = 'me'; $results = $service->users_labels->listUsersLabels($user); echo "<!DOCTYPE html>\n"; echo "<html>\n"; echo "<head>\n"; echo "<meta charset=\"utf-8\">\n"; echo "<title>Gmail</title>\n"; echo "</head>\n"; echo "<body>\n"; echo "<h1>Gmail</h1>\n"; echo "<h2>Labels</h2>\n"; echo "<p>ラベルは以下のとおりです。</p>\n"; echo "<ul>\n"; foreach ($results->getLabels() as $label) { echo "<li>" . $label->getId() . ' ... ' . $label->getName() . "</li>\n"; } echo "</ul>\n"; echo "</body>\n"; echo "</html>\n"; exit; function getClient() { $client = new Google_Client(); $client->setApplicationName('Gmail API PHP Quickstart'); $client->setScopes(Google_Service_Gmail::GMAIL_READONLY); $client->setAuthConfig('credentials.json'); $client->setAccessType('offline'); $client->setPrompt('select_account consent'); $tokenPath = 'token.json'; if (file_exists($tokenPath)) { $accessToken = json_decode(file_get_contents($tokenPath), true); $client->setAccessToken($accessToken); } if ($client->isAccessTokenExpired()) { exit('Access token is expired!'); } return $client; }
error_reporting の指定があるのは、PHP Warning の対策 本筋の対応では無いかもしれないが、詳細は以下 Laravel 5.5 + PHP 7.2 で count のエラー (Warning) が発生 https://mseeeen.msen.jp/warning-with-count-in-laravel-55-on-php-72/ ライブラリ内で出力されるが、「google/apiclient:^2.0」とバージョンを指定しているのが問題か(公式の解説が更新されていない?) また一例だが、以下のプログラムによって、ブラウザにGmailのメッセージを一覧表示できる
<?php if (version_compare(PHP_VERSION, '7.2.0', '>=')) { error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING); } require __DIR__ . '/vendor/autoload.php'; $client = getClient(); $service = new Google_Service_Gmail($client); $user = 'me'; $optParams = array( 'maxResults' => '10', 'labelIds' => 'INBOX', // ラベルのidはlistUsersLabels()で取得できる //'pageToken' => 'ページトークン', //'q' => 'is:unread', // Gmailのメール検索時の形式で条件を指定できる //'q' => 'from:someuser@example.com after:2018-02-20', ); $messages = $service->users_messages->listUsersMessages($user, $optParams); echo "<!DOCTYPE html>\n"; echo "<html>\n"; echo "<head>\n"; echo "<meta charset=\"utf-8\">\n"; echo "<title>Gmail</title>\n"; echo "</head>\n"; echo "<body>\n"; echo "<h1>Gmail</h1>\n"; echo "<h2>Messages</h2>\n"; echo "<p>メッセージは以下のとおりです。</p>\n"; foreach ($messages->getMessages() as $message) { $message_id = $message->getID(); $message_contents = $service->users_messages->get($user, $message_id); $snippet = $message_contents['snippet']; if (mb_strlen($snippet, 'UTF-8') > 40) { $snippet = mb_substr($snippet, 0, 40, 'UTF-8') . '...'; } echo "<div=\"message_" . $message_id . "\">\n"; echo "<h3>" . $snippet . "</h3>\n"; echo "<dl>\n"; foreach ($message_contents['payload']['headers'] as $header) { if (!preg_match('/^(From|Date|Subject|To)$/', $header['name'])) { continue; } echo "<dt>" . $header['name'] . "</dt><dd>" . $header['value'] . "</dd>\n"; } echo "</dl>\n"; if (!empty($message_contents['payload']['body']['data'])) { $body = $message_contents['payload']['body']['data']; $body = str_replace(array('-', '_'), array('+', '/'), $body); $body = base64_decode($body); echo "<pre>" . $body . "</pre>\n"; } echo "</div>\n"; } echo "</body>\n"; echo "</html>\n"; exit; function getClient() { $client = new Google_Client(); $client->setApplicationName('Gmail API PHP Quickstart'); $client->setScopes(Google_Service_Gmail::GMAIL_READONLY); $client->setAuthConfig('credentials.json'); $client->setAccessType('offline'); $client->setPrompt('select_account consent'); $tokenPath = 'token.json'; if (file_exists($tokenPath)) { $accessToken = json_decode(file_get_contents($tokenPath), true); $client->setAccessToken($accessToken); } if ($client->isAccessTokenExpired()) { exit('Access token is expired!'); } return $client; }
■外部POP3の受信遅延を短くする 設定 → アカウントとインポート → 他のアカウントでメールを確認 → メールを今すぐ確認する とすれば即座に確認されるみたい ただし毎回クリックするのは大変 GMail POP3 Checker で対応できるみたい(未検証) ただしTampermonkeyでサードパーティー製プラグインを入れる必要があり、 また寄付しないと12分までくらいしか短くならないらしい 少し様子見したい Gmailの異常に遅い外部POP3受信のストレスを解消する方法 | オランダで生きていく https://nldot.info/how-to-speed-up-gmail-external-pop3/ Gmailの外部アカウントのPOP3受信の遅延を無くす最強の方法 - 余白の書きなぐり http://auewe.hatenablog.com/entry/2014/05/18/024715 ■Gmailの容量を確保する Gmailの容量は15GBだが、仕事アカウントで13GB近く消費していたので作業 以下、仕事メールで実際にメールを削除した時のメモ 作業前 12.82 GB/15 GB(85%)を使用中 不要な通知メールを大量に削除(思ったより容量削減にはならなかった) 11.12 GB/15 GB(74%)を使用中 【Gmailの使用容量を減らす】一括削除の大掃除をする方法 https://www.sho-design.net/gmail-cleanup/ 上記を参考に、重いファイルが添付されているメールを削除する size:30m older_than:1y の結果に表示されたメールを削除 10.96 GB/15 GB(73%)を使用中 size:20m older_than:1y の結果に表示されたメールを削除 10.74 GB/15 GB(71%)を使用中 size:10m older_than:1y の結果に表示されたメールを削除 9.17 GB/15 GB を使用中 それなりに削減された テキストメールを削除するよりは、こちらの方が効果がありそう また容量が少なくなってきたら、同様に重いファイルが添付されているメールを削除する ■メールを送信できなくなった Gmailを使用していると、メール送信後に
example@example.com にアクセスできなくなりました。 このメールを送信するには、別の「送信元」アドレスを選択してからもう一度お試しください。 詳しくは、https://support.google.com/mail/answer/22370?hl=ja をご覧ください
と届くようになった 特に前触れなどは無く突然 どうやらメールの送信ができなくなっている 別のアドレスやエイリアスからメールを送信する - Gmail ヘルプ https://support.google.com/mail/answer/22370?hl=ja Gmail上で独自ドメインなどの別メールアドレスから突然送信できなくなる現象と、その解決法 | しらこのナレッジ https://tecchan.jp/entry/211019-gmailsmtp/ 突如、gmailで送信ができなくなりました。受信は問題なくできます。 - Gmail コミュニティ https://support.google.com/mail/thread/130942160/%E7%AA%81%E5%A6%82%E3%80%81gmail%E3%81%A7%E9%80%81%... 上記にあるとおり、メールの送信設定を削除して再設定すれば解消した 署名は再設定が必要だった ただし原因は不明のまま

Advertisement