#Amazon SESとは
SES(Simple Email Service)
AWSが提供するメール送受信に特化したサービスです。
本来メール送信するには、サーバーにSMTPサーバー(Postfixとか)を設置して、迷惑メールにならないようにSPFやDKIMなどセキリュティ面も考慮して構築しなければいけません。
SESならAWSマネジメントコンソール上で簡単にメール送信することができます。
#前提
- DNSはRoute 53を使用しています。
- メール送信機能はLaravelで作成してます。
#構築
###リージョンを選択
東京リージョンはサービス提供していないのでバージニアリージョンを選択します。
###テスト用メールアドレスを登録
[Email Addresses]を選択し、受信可能なメールアドレスを登録します。
登録したメールアドレス宛に検証メールが届くので、開いてリンクをクリックします。
クリックすることで承認されて、テスト用メールアドレスの登録完了です。
#テストメール送信
現段階では登録したメールアドレスしか送信できない制限がかかっているので
from と to に検証したメールアドレスを指定し、メールが届くことを確認します。
#ドメインを登録する
[Dmaions]を選択し、[verify a New Domain]から登録します。
####SPF設定
TXTレコードが生成される。
Route 53の場合のみ[Use Route 53]ボタンを押すと自動的に登録されます。
####DKIM設定
CNAMEレコードが生成される。
Route 53の場合のみ[Use Route 53]ボタンを押すと自動的に登録されます。
#SMTP設定
[SMTP Settings]から[Create My SMTP Credentials]を選択します。
そのまま作成ボタン押すことでSMTP専用のIAMが作られます。
その設定をLaravelの.envファイルに書き込みます。
MAIL_MAILER=smtp
MAIL_HOST=email-smtp.us-east-1.amazonaws.com
MAIL_PORT=587
MAIL_USERNAME=****************
MAIL_PASSWORD=***************************
MAIL_ENCRYPTION=TLS
Laravelのメール設定で送信先メールアドレスと受信先メールアドレスに先程登録したメールアドレスまたはドメインのものをセットすれば送信できます。
#SES送信制限の解除申請
解除しなければ、登録したメールアドレスまたはドメインしか使用できません。
任意の項目が多いが空欄で申請すると受理されないのでなるべく埋めてください。
(受理されるまで1営業日ほどかかります。)
受理されると存在するメールアドレスなら何でも送信できます。
#バウンス率に注意する
バウンスとは - 送信したメールメッセージが何等かの理由で目的の送信先に正常に配信されなかったことです。
バウンス率が10%以上になるとAmazon SESサービスが利用できなくなります。
ユーザーの入力したメールアドレスを送信メールアドレスに使用する場合は、ある程度のバリデーションを用意し、存在しないメールアドレスに送信しないような実装が必要です。
#確認
メール送信後、受信したメールのメールヘッダを確認することでSPF、DKIMが適用されているか確認できます。