技術ブログ

WordPressでAmazon SESを使ってメールを送信する

2020年8月10日

Amazon SES

WordPress から Amazon SES の SMTP インターフェースを利用して E メールを送信できるようにします。

この記事では WP Mail SMTP by WPForms プラグインを使って Amazon SES 経由でメールを送信する方法を紹介しています。事前の準備として Amazon SES からメールを送信できるようにして、SMTP インターフェースを利用するためのユーザを作成しておく必要があります。設定は以下の記事にまとめているので、まずはこちらからご確認ください。

Amazon SES
Amazon SESの初期設定 Eメールのセットアップ

Amazon SES(Simple Email Service) が東京リージョンで利用できるようになりました。 Ama ...

目次

  1. 【参考】WordPress 標準のメール送信機能から SES を利用する方法を調べる
  2. WP Mail SMTP by WPForms プラグインを使う
  3. Amazon SES SMTP インターフェースを利用するように設定する
  4. テストメールを送信する
  5. SMTP ユーザ名とパスワードを wp-config.php に保存する

【参考】WordPress 標準のメール送信機能から SES を利用する方法を調べる

結果的にこの方法は使わなかったので、参考程度に読み飛ばしてください。WordPress に標準で備わっているメール送信関数 wp_mail() を利用して Amazon SES からメールを送信するために調査した記録です。

wp_mail() 関数のソースコードは wp-includes/pluggable.php にあります。ソースを読むと、メール送信部分は PHPMailer/PHPMailer を利用していることが分かります。PHPMailer の SMTP サーバを指定する方法を調べると、サンプルのコード の例のように SMTP の設定をすることができそうです。

つぎに WordPress に組み込まれている PHPMailer に SMTP サーバを設定する方法を調べます。再び wp_mail() 関数のドキュメント読み進めると、User Contributed Notes に SMTP サーバを設定する方法が載っていました。

add_action( 'phpmailer_init', 'mailer_config', 10, 1);
function mailer_config(PHPMailer $mailer){
  $mailer->IsSMTP();
  $mailer->Host = "mail.telemar.it"; // your SMTP server
  $mailer->Port = 25;
  $mailer->SMTPDebug = 2; // write 0 if you don't want to see client/server communication in page
  $mailer->CharSet  = "utf-8";
}

上記のコードを functions.php に書くことで SMTP サーバを指定してメールを送信することができそうです。しかし、メールのようなコア機能をテーマに依存させるのは避けたかったのでこの方法を取るのはやめて、プラグインを探すことにしました。

WP Mail SMTP by WPForms プラグインを使う

WordPress のプラグインを「SMTP」という言葉で検索してみると、この記事を書いた 2020 年 8 月時点では WP Mail SMTP by WPForms プラグインが一番最初に検索結果に出てきます。WordPress から SMTP サーバを設定してメールを送信することができる、求めているプラグインです。リンク先を見ると分かるように、インストール数・評価数がともに高く、更新頻度も高いので信頼ができそうです。さっそくインストールをします。

Amazon SES SMTP インターフェースを利用するように設定する

プラグインの有効化をすると、左メニューに WP Mail SMTP が出てくるのでクリックをします。一般タブを設定していきます。

WP Mail SMTP

From アドレス周りの設定です。ご自身のものに置き換えて設定をしてください。

WP Mail SMTP From アドレス

メーラーは Amazon SES ではなく Other SMTP を選択します。Amazon SES は有料版を購入すると利用できる機能ですが、有料版を購入しなくても SES からメールを送信することは可能です。

WP Mail SMTP メーラー

Other SMTP のところを以下のように設定をします。SMTP Username と SMTP Password のところには、前回の記事で入手した SMTP のユーザ名とパスワードを入力します。

WP Mail SMTP Other SMTP

SMTP のユーザ名とパスワードの取得方法はこちらの記事を参考にしてください。

Amazon SES
Amazon SESのSMTPインターフェースでメール送信する

前回は Amazon SES で ID の検証を行い、E メールのセットアップを行いました。 今回は SES の SMT ...

下にスクロールをして「設定を保存」ボタンをクリックします。

テストメールを送信する

きちんと設定ができているか、テストメールを送信して確認をします。「Email Test」タブをクリックします。次に「Send To」に受信できるメールアドレスを入力して「Send Email」をクリックします。

WP Mail SMTP Email Test

メールが送信されれば成功です。

SMTP ユーザ名とパスワードを wp-config.php に保存する

SES 経由でメールが送信できるようになりましたが、「一般」タブの SMTP Password の下に気になる一文がありました。

WP Mail SMTP 平文パスワード

以下のように、パスワードが暗号化されずに保存されていると書いてあります。

The password will be stored in plain text. For improved security, we highly recommend using your site's WordPress configuration file to set your password.

調べてみたら、確かに wp_options テーブルに平文で保存されていました。以下の SQL 文で確認ができます。

SELECT * FROM wp_options WHERE option_name='wp_mail_smtp';

パスワードを平文で保存することは推奨されていないので、Learn More のリンク先 How to Secure SMTP Settings by Using Constants を参考に、ユーザ名とパスワードを wp-config.php に保存するようにします。

wp-config.php に以下の定数を追記します。WPMS_SMTP_USERWPMS_SMTP_PASS はご自身のものに置き換えてください。

define('WPMS_ON', true);
define('WPMS_SMTP_USER', 'AKIAXXXXXXXXXXXXXXXX');
define('WPMS_SMTP_PASS', 'BLkexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');

管理画面から SMTP Username と SMTP Password を空欄にして保存します。すると、以下の画像のように画面からユーザ名とパスワードが入力できなくなり、説明文が変化します。

WP Mail SMTP 定数を使用した設定

wp_options テーブルからもユーザ名とパスワードが消えていることを確認します。

SELECT * FROM wp_options WHERE option_name='wp_mail_smtp';

再度テストメールを送信し、送信が成功することを確認します。

おわりに

3 回にわたり紹介をした Amazon SES の設定はこれで終了です。参考になれば嬉しいです。

1 回目の記事から読みたい場合はこちらからどうぞ。

Amazon SES
Amazon SESの初期設定 Eメールのセットアップ

Amazon SES(Simple Email Service) が東京リージョンで利用できるようになりました。 Ama ...

-技術ブログ
-,

© 2020 karakaram-blog