VMware Cloud on AWSからAmazon SESを経由してメールを送信してみた
こんにちは、AWS事業本部の荒平(@0Air)です。
VMware Cloud on AWSからAmazon SESを経由してメールを送りたい、そんな季節もあると思います。
今回は、VMware Cloud on AWSからPostfixを利用して、Amazon SESをリレーサーバとして指定し、メールを送信してみました。
構成図
本エントリの構成図です。
VMware Cloud on AWSの仮想マシン(Ubuntu)にPostfixを導入し、Amazon SESへSMTP認証を利用してメールをリレーします。
やってみた
1. Amazon SESをセットアップする
Amazon SESのセットアップを行い、Eメール認証・ドメイン認証・本番利用申請を実施します。
このあたりは環境によって操作内容が変わる他、公式からチュートリアルが出ているため割愛します。
本稼働アクセスリクエストを実施しました。
サンドボックス→本番アクセスへ移行しない場合は、機能的に多く制限されます。
「本番アクセスが許可されました」のステータスになっていると、あらゆる宛先へのメール送信が可能です。
2. SMTP認証設定
以下の記事を参考に、SMTPインターフェイスの設定を行います。
(少々インターフェイスが更新されているので、本記事で補足します)
「SMTP認証情報の作成」をクリックします。
IAMユーザー作成画面が開きます。 ユーザー名は日時から自動で入力されますので、適宜変更して「ユーザーの作成」をクリックします。
作成された認証情報が生成されるます。送信のために利用するため、控えておきます。
3. メール送信準備(Ubuntu/postfix)
検証のため、UbuntuからSMTP認証でメールを送信する準備手順です。
各クライアントから、「email-smtp.ap-northeast-1.amazonaws.com:port」(利用リージョンによって異なる)へのリクエストを送れるようにします。
今回はpostfixを利用するため、以下のコマンドを投入しました。
sudo apt update sudo apt install mailutils sudo apt install postfix
Postfixインストール時に設定が求められるので、Internet Site
を選択します。
System mail nameは、システムのメール名(FQDN)を入力し、「OK」をクリックします。
続いて、Postfixの詳細設定を行います。
sudo vim /etc/postfix/main.cf
main.cf
に以下の設定を修正・追加します。
relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_use_tls = yes smtp_tls_security_level = encrypt smtp_tls_note_starttls_offer = yes smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
以下のようなイメージです。
Amazon SESにて生成したSMTP認証情報(ユーザー名・パスワード)を設定します。
sudo vim /etc/postfix/sasl_passwd
ユーザー名(USERNAME)・パスワード(PASSWORD)は先程発行したユーザーのものに置き換えます。
[email-smtp.ap-northeast-1.amazonaws.com]:587 USERNAME:PASSWORD
認証情報ファイルへのアクセス権限を制限して、再起動します。
sudo chmod 640 /etc/postfix/sasl_passwd sudo postmap /etc/postfix/sasl_passwd sudo systemctl restart postfix
4. VMware Cloud on AWS側の設定
VMware Cloud on AWSのNSXでは、仮想マシンからインターネット向けのFirewallを許可します。
ポート番号は利用するポートによって異なります。(今回の場合、587)
587番ポートはデフォルトのリストに存在しないので、手動でAmazon SES用のエントリを追加しました。
※ 任意のインターネット向けアウトバウンドが許可されている場合は、不要です
仮想マシン→インターネット向けに、Amazon SES(ポート:587)を設定してみました。
5. メール送信
SESを経由してpostfixからメールを送信してみます。
echo "Test email from Postfix" | mail -s "Test Postfix" -r ses@from-mail-address.classmethod.jp destination@classmethod.jp
無事にメールがデリバリーされました!
おわりに
Postfixを扱うのが初めてだったので、かなり手間取りました。
備忘的に、検証時に出ていたエラーを2つ紹介します。
遭遇したエラーメッセージ1:
(SASL authentication failed; server email-smtp.ap-northeast-1.amazonaws.com[xx.xx.xx.xx] said: 535 Authentication Credentials Invalid)
/etc/postfix/sasl_passwd
の認証情報が間違っている場合に出ていました。また、変更後は再度sudo postmap /etc/postfix/sasl_passwd
にてDBの更新が必要でした。
遭遇したエラーメッセージ2:
Diagnostic-Code: smtp; 554 Message rejected: Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1: root
送信元メールアドレスが指定されていない/SES側で検証登録されていない場合に出ていました。
記事中のコマンドにて-r
オプションを指定すれば解決しました。
このエントリが誰かの助けになれば幸いです。
それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!