[工事中]
概要
WordPressからお問い合わせフォーム(Contact Form)を作りましたが、メール送信ができないため、EC2からSES経由でメール送信をできるように設定する。
TODO
- Amazon SESを構築する
- EC2にPostfixを入れてSES経由でメール送信
全体の流れ
手順
SESを構築する
- メールアドレスの確認
- AWSコンソールからSESにアクセス [Create Identity]ボタンを押して、検証したい自分の受信メアドを入力して検証を実施する。
- AWSからきたメールを開き、検証URLをブラウザで開く。
- 検証成功後、[Identity status]が[Verified]に変わる。
- サンドボックス解除のリクエスト
上記の[Request production access]ボタンを押す。申請したら、画面上部に以下のメッセージが表示される。
Successfully submitted request for production access. It may take up to 24 hours to review the details of your request.
残念ながら、数分後に画面上に以下のメッセージが表示されて、どうやら申請がdenyされた模様。
Production access request denied Amazon SES has denied your request for production access. You may no longer request access from the Amazon SES console. For details about why your request was denied or to file an appeal, see case ID 2313132443 in the AWS Support Center.
申請を拒否されましたが、送信元メアドとして認証済のメアド(つまり、自分への送信)ならサイドボックスで許可されるので、[Verified identities]に入り、[Send test mail]を試してみた所、無事に送信できた。一旦これで次の作業に進む。
-
SMTP認証情報の取得 EC2からSESにメール送信するには、SMTP認証が必要。SMTP認証用の認証情報(クレデンシャル)を取得する。 Amazon SES SMTP 認証情報を取得 にて、[Simple Mail Transfer Protocol (SMTP) settings]にあるSMTP endpointをメモしておき、下部のボタンを押す。
次の画面ではデフォルトのままで[作成]ボタンを押す。
ユーザが正常に作成されたと表示。画面下部にある[認証情報のダウンロード]を押す。すると、credentials.csvという名前のCSVファイルがダウンロードされるので、ファイルを開くと、
- IAM User Name
- Smtp Username
- Smtp Password
の3列があり、それをメモしておく。これで認証情報が取得済なので、画面下部の[閉じる]を押す。
EC2側の設定
Postfixの設定
main.cfの設定
/etc/postfix/main.cfをvimで直接編集することも可能だが、今回はpostconfコマンドでシェルから追加していく。
メールのリレー先(中継サーバ)に、SESのエンドポイントを指定する。SESのエンドポイントは、SMTP認証情報の取得の際に控えておいた情報を使用する。
$ sudo postconf -e "relayhost = [email-smtp.us-east-1.amazonaws.com]:587"
以下のコマンドはまだ完全に理解できていないが、参考資料 に従って実行する。
- SASL認証の設定を追加
$ sudo postconf -e "smtp_sasl_auth_enable = yes" \ "smtp_sasl_security_options = noanonymous" \ "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd"
- TLSによる外部配送暗号化の設定を追加
$ sudo postconf -e "smtp_use_tls = yes" \ "smtp_tls_loglevel = 1" \ "smtp_tls_security_level = encrypt" \ "smtp_tls_note_starttls_offer = yes" \ "smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt"
- オープンリレーを防止
メール配送を許可する送信元ネットワークをループバックアドレスに限定する。
$ sudo postconf -e "mynetworks = 127.0.0.0/8"
- sasl_passwdの設定
SMTP認証情報を格納するファイルを開く。ファイルが存在しない場合は新規作成。
$ sudo vim /etc/postfix/sasl_passwd
SES用認証情報の取得で得られた認証情報を使用して、メール中継先のSESエンドポイントに対応するユーザ名とパスワードを指定する。ユーザ名とパスワードは:で連結して記載。
[email-smtp.us-east-1.amazonaws.com]:587 <ユーザ名>:<パスワード>
アクセス権限を強化。
$ sudo chmod 600 /etc/postfix/sasl_passwd
- 認証情報のハッシュマップDBを作成
先ほど作成したsasl_passwdのハッシュマップDBファイルを作成。
$ sudo postmap hash:/etc/postfix/sasl_passwd
アクセス権限を強化。
$ sudo chmod 600 /etc/postfix/sasl_passwd.db
- 設定を有効化するため、postfixサービスを再起動
$ sudo systemctl restart postfix
- メール送信テスト ```sh $ sudo sendmail -f <送信元メールアドレス> <宛先メールアドレス> From: <送信元メールアドレス> Subject: <件名>件名>送信元メールアドレス>宛先メールアドレス>送信元メールアドレス>