とーますメモ

Ruby on Rails / Goなどの学習メモ

【Lightsail × WordPress】メール配信サービスのAmazon SESを使ってみた

基本的には以下のサイトの通りに設定すればOKだが、所々わかりにくい箇所があるので、自分なりにまとめる。
Amazon Lightsail の WordPress で E メール を有効にする | Lightsail ドキュメント

ちなみにWordPressは既にインストール済みであることと、SMTP設定用プラグインは「WP Mail SMTP」を使用する。
(上記のリンクでもこのプラグインを使用している。他のプラグインでも良いだろうが...)

Amazon SESアカウントの作成

以下のサイトを参考に設定を行う。
Amazon Lightsail の WordPress で E メール を有効にする | Lightsail ドキュメント

[注意] アカウント作成時は「サンドボックス」という制限がついた環境設定になっているため
1対多のような任意の受信者にメールを送るためにはこの設定を解除する必要がある。
制限内容は以下。

・「送信元メールアドレス」及び「送信先メールアドレス」は、SESアカウント内で検証済みである必要がある。
・最大で24時間あたり200メッセージしか送信できない
・最大で1秒あたり1メッセージしか送信できない

Amazon SESを使うならサンドボックスの外にいくこと - Qiita
Amazon SES サンドボックスの外への移動 - Amazon Simple Email Service

指定されたメールアドレスにしかメールを送らない簡易なシステム通知ぐらいであればサンドボックス制限は外さないでも良いだろうが
マーケティング系の一斉メールを行いたい場合などは、このサンドボックス制限を外す必要がある。

以下が簡単な流れ。

1)SESコンソールにログイン
2)左側ナビメニューの「SMTP Settings」からSMTPの設定を行う。尚設定内容はメモっておくこと。
3)「送信元」メールのドメイン検証を行う。左側ナビメニューの「Domains」から行う。このときDKIM設定も行う。

DKIM設定をしていないと場合の例
AWS SESで送信ドメイン認証を設定する - Qiita

この設定を行うことで、設定したドメインのどのメールアドレスからでもメールを送信できる。
※MXレコードの設定で引っかかると思うので、上記リンク先のDNSレコードの設定例画像を参考にすること。

4)「送信先」のメールアドレスを認証する。左側ナビメニューの「Email Addresses」から行う。
※ただしサンドボックス制限下でなければ無視しても良い。

5)「WP Mail SMTP」の設定を行う。

From Emailには3)で設定したドメインのメールであれば、どのメールアドレスでも設定可能
SMTP Host、SMTP Username、SMTP Passwordには2)でメモしておいたものを設定する。
全て設定後、「WP Mail SMTP」の「Email Test」タブで、4)で設定した送信先メールアドレスを入力し、「Send Email」を押してメールが届けば設定がうまく行っている。

[参考]
AWS SES メール送信環境のセキュリティを解剖する (2020年版) - Qiita

サンドボックス制限を解除する

上記でも説明したように、この制限を解除することで、メール認証したメールアドレス以外のメールアドレスにもメール送信が可能になる。

以下のサイトさんの説明を参照
Amazon SES 制限解除申請(Amazon SES編 その3) - Laravel学習帳
Amazon SES でドメイン検証してメールを送信してみた - michimani.net
SES送信制限解除申請 (SES Sending Limits) | Developers.IO

バウンス(エラー)メールや苦情(スパム)メール対応

恐らくSESを使う中で、この設定が一番面倒。

詳細は以下のサイトさんを参照
AWS SESをちゃんと使うためにやるべきこと - Qiita
AWSのSESでバウンスメール(bouncemail)対策。3つの方法とメリット・デメリット | ブログ|ベトナムでのオフショア開発とスマートフォンアプリ開発のバイタリフィ
Amazon SESの掟 – サーバーワークスエンジニアブログ
Amazon SES経由のバウンスメールをWebアプリで受け取る - Qiita
Amazon SNS での Amazon SES 通知 - Amazon Simple Email Service

比較的Amazon SNSを使用して、メールを飛ばすやり方が簡単か・・・

バウンスレート管理していないと起こる問題について参考
[AWS] Amazon SESのアカウントが止められちゃった話 - Qiita

バウンスレートを下げる方法もある。以下のサイトを参考
Amazon SESのバウンスレート上昇時の対策 - Qiita

開封率やクリック追跡

以下のサイトさんを参照
Amazon SESで開封やクリックのトラッキングが可能になりました。 | Developers.IO

ただしすごい面倒くさそう。
WordPressなら「WP Offload SES」というAmazon SESだけに特化したプラグインがある。
このプラグインを使えば、メール送信ログや開封率、クリック追跡もできる。

Send Your WordPress Emails via Amazon SES with WP Offload SES - Delicious Brains Inc
Top 3 SMTP Plugins for WordPress Compared (and How to Fix Emails Not Sending) - MailPoet

SESでメール受信

[注意] 特定リージョンでしか現在サポートされていない。

Amazon SES doesn't support email receiving in the following Regions: Asia Pacific (Mumbai), Asia Pacific (Sydney), Canada (Central), Europe (Frankfurt), Europe (London), South America (São Paulo), and AWS GovCloud (US).

詳細は以下
Amazon Simple Email Service endpoints and quotas - AWS General Reference
https://forums.aws.amazon.com/thread.jspa?threadID=314983

基本的に以下のサイトのとおりにやればOKっぽいが、Gmailで受信するような感じでメールを見れるわけではない
[新機能]Amazon SES でメール受信が出来るようになりました! | Developers.IO

所感

指定されたメールアドレス宛てに送る緊急性を要さないシステム通知など用途で使用するなら楽で良いが、大量のユーザに送るケースは、バウンスレートに注意する必要がありそのためにいろんな設定が必要だし、メールの開封率やクリック追跡などの分析が必要な場合は正直、かなり不便だと感じた。

コスパは断トツで良いが、機能面が他のメール配信サービスと比べてまだまだな印象なので、現在のところ本番環境での使用は考えない。