技術・開発

【WordPress】WP Mail SMTPでGmail経由のメール送信を設定する方法(GCP API連携)

2020年7月5日

今まで自サーバーに構築したシステムからメール送信を行っていましたが、到達率や管理の観点から「Gmail経由でのメール送信」に変更することにしました。

なぜWordPress標準機能ではダメなのか?

WordPressには標準でメール送信機能(wp_mail)が備わっていますが、これはWordPressがインストールされているのと同じサーバー内にメール送信機能(SendmailやPostfixなど)が構築・稼働していることが前提となります。

そのため、Gmailなどの外部メールサーバーを経由して送信したい場合は、標準機能のままでは送ることができません。外部のSMTPサーバーやAPIを利用するための専用プラグインを導入する必要があります。

Step 1:「WP Mail SMTP」プラグインのインストール

外部のメール送信機能を使うためのプラグインはいくつか存在しますが、今回は最もメジャーで設定が分かりやすい「WP Mail SMTP」を使用します。

WP Mail SMTP プラグイン画面

プラグインをインストールして有効化すると、WordPressの左側メニューに「WP Mail SMTP」が表示されます。

Step 2:WordPress側でリダイレクトURIを確認する

まずは「WP Mail SMTP」の設定画面を開き、メーラーの選択欄で「Google / Gmail」を選択します。

メーラーでGmailを選択

Gmailをメーラーとして利用するには、Google側の「Client ID(クライアントID)」と「Client Secret(クライアントシークレット)」の入力が必要になります。

※注意点: > 「その他のSMTP (Other SMTP)」を選んでGmailのSMTP情報を直接入力することも可能ですが、セキュリティの観点から絶対に推奨されません。(理由は後述します)

Authorized redirect URIの確認画面

設定画面の下部に「Authorized redirect URI(承認済みのリダイレクト URI)」というURLが表示されているので、このURLをコピー(メモ)しておきます。
ここから先は、一度Google側の設定画面(GCP)へ移動します。


Step 3:GCPでClient IDとClient Secretを取得する

ここからは Google Cloud Platform (GCP) 側での作業になります。

1. Gmail APIの有効化

まず、GCPのAPIライブラリにアクセスします。

GCP APIライブラリの検索画面

検索ボックスに「Gmail API」と入力し、詳細画面へ遷移します。

Gmail APIの選択
Gmail API 有効化ボタン

有効にする」をクリックします。
(※注意:上部のメニューでプロジェクトが選択されていないと有効化できないため、今回はデフォルトの「My First Project」を選択しています)

プロジェクト選択と認証情報への遷移

2. OAuth同意画面の作成

右側にある「認証情報を作成」をクリックします。

認証情報の作成ウィザード

ウィザードに従い、以下のように選択します。

  • 使用する API:Gmail API
  • API を呼び出す場所:ウェブブラウザ(JavaScript)
  • アクセスするデータの種類:ユーザーデータ

「必要な認証情報」ボタンを押下すると、「同意画面を設定」という案内が出るため、そちらをクリックして同意画面の作成に進みます。

同意画面の設定への誘導
OAuth同意画面のUser Type選択

User Typeの選択画面になります。

  • G Suite (Google Workspace) を契約している場合:内部(セキュリティが高くなります)
  • 一般のGmailアカウントの場合:外部
アプリ情報の入力
スコープなどの設定

アプリケーション名(例:WordPress Mailなど)を入力し、一番下の「保存」を押下すれば、OAuth同意画面の作成は完了です。

OAuth同意画面の作成完了

3. クライアントIDとシークレットの取得

左メニューから「認証情報」を選択し、上部の「認証情報を作成」>「OAuth クライアント ID」をクリックします。

認証情報の作成メニュー
OAuthクライアントIDの選択

以下の情報を入力していきます。

クライアントIDの作成情報の入力
  • アプリケーションの種類:ウェブ アプリケーション
  • 名前:任意の名前
  • 承認済みの JavaScript 生成元:自身のブログドメイン(例: https://kaede.jp
  • 承認済みのリダイレクト URI:Step 2でメモした「Authorized redirect URI」
WP Mail SMTP側のURIを再確認
※WordPressの設定画面でコピーしておいたURIを、GCPの「承認済みのリダイレクト URI」に貼り付けます。

保存をクリックすると、目的である「クライアント ID」と「クライアント シークレット」が表示されます。これをコピーしてください。

クライアントIDとシークレットの取得

Step 4:WordPress(WP Mail SMTP)側で認証・連携する

WordPressの「WP Mail SMTP」設定画面に戻り、先ほどGCPで取得した「Client ID」と「Client Secret」をそれぞれの欄に貼り付けて設定を保存します。

保存が完了すると、「Authorization(認証)」の項目にある「Allow plugin to send emails using your Google account」ボタンがアクティブになるのでクリックします。

Googleアカウントによる認証ボタン

Googleの認証画面が表示されるので、メール送信に利用したいGoogleアカウントを選択して連携を許可します。
※OAuth同意画面で「内部」を選択した場合は、対象のG Suiteアカウントでログインする必要があります。

Googleアカウントの認証プロセス

許可後、WordPressの画面に戻り、Authorizationの項目に連携したメールアドレスが表示されれば認証完了です!

認証成功時の表示

最後に、お問い合わせフォーム(Contact Form 7など)や、WP Mail SMTPのテストメール送信機能を使って、正常にメールが届くか確認しましょう。


補足:なぜ手軽な「SMTP設定」ではなく「OAuth認証 (Gmail API)」を使うべきなのか?

設定を見て「GoogleのAPI画面を開くなんて面倒くさい!Other SMTPを選んで、GmailのIDとパスワードを直接入力した方が早いのでは?」と思った方もいるかもしれません。

しかし、Googleは2020年にG Suiteにおいて「安全性の低いアプリ(POP/IMAP/SMTPの基本認証)」のアクセスを廃止すると通達を出していました。
(参考:Turning off less secure app access to G Suite accounts

この仕様変更により、Outlook 2013などOAuth認証に非対応の古いメールクライアントが使用不可になる等の影響が出ました。新型コロナウイルスの影響もあり、2020年3月に一時的にスケジュールが撤回・延期されましたが、将来的には確実にIDとパスワードによる単純なSMTP認証はブロックされる方向へ向かっています。

ある日突然「サイトの問い合わせフォームからメールが届かなくなった!」というトラブルを防ぐためにも、少し手間はかかりますが、よりセキュアなOAuth認証(Gmail API)を経由して送信設定を行うのが最も無難で確実な方法です。

-技術・開発
-, , , , , , ,