WordPress : OAuth 2.0になってから設定がトリッキーになった~Gmail送信が7日後に止まる原因と対策~

FluentSMTP / WP Mail SMTP / Post SMTPで必要だった「In production化」と再接続

WordPressサイトからGmailを使ってメール送信していると、ある日突然メールが送れなくなることがあります。

特に、FluentSMTP、WP Mail SMTP、Post SMTPなどでGmail API連携を使っている場合、次のような現象が起きることがあります。

今回、実際にこの現象を確認し、原因が Google Cloud側のOAuth公開ステータスWordPressプラグイン側の再接続不足 にあることが分かりました。

結論:7日後に切れる原因はaccess tokenではなくrefresh token

Gmail APIでは、OAuth 2.0という認証方式が使われます。

ここで重要なのは、次の2種類のトークンです。

種類 役割
access token Gmail APIを実際に呼び出すための短期トークン
refresh token access tokenを再発行するための長期トークン

access tokenは短時間で期限切れになる前提のものです。
通常、SMTPプラグインはrefresh tokenを使ってaccess tokenを自動更新します。

したがって、access tokenが期限切れになること自体は正常です。

問題は、Google CloudのOAuthアプリが Testing / テスト中 のままだと、refresh token自体が7日で失効する場合があることです。Google Ads APIの公式エラー説明でも、Googleプロジェクトの公開ステータスがTestingの場合、refresh tokenが7日で失効し、invalid_grant が発生するため、公開ステータスを In production に変更するよう案内されています。

発生したエラー例

今回確認したエラーの一例 (WP Mail SMTP: メール送信のエラー関連)は以下です。

このエラーは、Gmail APIに送信リクエストを出す際に、有効な認証情報、つまり有効なaccess tokenが付いていないことを示します。

ただし、根本原因はaccess tokenそのものではなく、refresh tokenが失効してaccess tokenを再取得できなくなっていることである可能性が高いです。

なぜ7日で切れるのか

Google CloudのOAuth同意画面には、公開ステータスがあります。

主に以下の2つです。

公開ステータス 意味
Testing / テスト中 開発・検証中の状態
In production / 本番環境 継続利用する状態

OAuthアプリがTestingのままだと、テストユーザーのみがアクセスできる状態になり、refresh tokenが7日で失効することがあります。

Stack Overflowでも、TestingからProductionへ変更するとrefresh tokenの7日失効が止まるという事例が報告されています。

つまり、7日ごとにGmail送信が止まる場合、次のような構造になっている可能性があります。

対策の全体像

対策は、単にGoogle Cloud側を本番環境にするだけでは不十分でした。

重要なのは、次の2つをセットで行うことです。

Google CloudをIn productionにしても、WordPress側にTesting時代の古いrefresh tokenが残っていると、再び7日後に切れる可能性があります。

そのため、既存接続を削除して、Google認証をやり直すことが必要です。

手順1:Google Cloudで公開ステータスを確認する

Google Cloud Consoleで対象プロジェクトを開きます。

ここが次のようになっていれば、本番環境です。

画面に 「テストに戻る」 ボタンが表示されている場合、それは現在が本番環境であることを意味します。
このボタンは押してはいけません。

手順2:Client IDが正しいプロジェクトのものか確認する

ここは非常に重要です。

Google Cloud側でIn productionにしたつもりでも、WordPressプラグインに入力しているClient IDが別プロジェクトのものなら、問題は解決しません。

確認すべき場所は以下です。

または、

ここに表示されるClient IDと、FluentSMTPなどに入力しているClient IDが完全一致している必要があります。

手順3:FluentSMTPで既存のGmail接続を削除する

FluentSMTPの場合、WordPress管理画面で以下へ進みます。

Gmail / Google Workspace接続が表示されている場合、右側の赤いゴミ箱アイコンを押して削除します。

これは、保存済みの古いOAuth tokenを削除するためです。

手順4:FluentSMTPでGmail接続を作り直す

既存接続を削除したら、右上の 「別の接続を追加」 を押します。

その後、次のように進めます。

FluentSMTP公式ドキュメントでも、Client IDとClient Secretを入力した後、Authenticate with Google & Get Access Token を押してアクセストークンを取得する手順が説明されています。

人気順

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA