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 を押してアクセストークンを取得する手順が説明されています。
コメントを残す