AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

AWS SES を postfix 経由で利用する (mail コマンドで雑に送信できるようにする)

dev.classmethod.jp

これ。

雰囲気

雰囲気としては以下のような感じ。

mail コマンド -> 同じ環境内の postfix(sendmail) -> AWS SES -> 宛先メールボックス

/etc/postfix/main.cf
# readme_directory: The location of the Postfix README files.
#
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = encrypt
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
relayhost = [email-smtp.us-east-1.amazonaws.com]:587
smtp_sasl_auth_enable = yes
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

送信のテスト

上記のような環境だと、 IAM の権限も SES 系は付与していないはずなので、以下のような aws ses コマンドが利用出来ないはず。 (そもそも postfix を経由しないのでメール送信テストになっていない。)

aws ses send-email \
  --from no-reply@example.jp \
  --to receiver@example.co.jp \
  --subject "test" \
  --text "send test."

なので、昔ながらの素朴な mail コマンドを利用して、 postfix を経由して送信する。

echo "send test" | mail -s "test" -r no-reply@example.com receiver@example.com

qiita.com

なぜこのような記事を?

これ 2015 年とかそのあたり? に構築したインスタンスで、aws-ses とか aws-rails 系の gem も未成熟で、まだ AWS SES もバージニア北部 (us-east-1) 限定だった頃の設定なんすけど、まあわりとそんな環境が多いのと、過去記事にしたはずが残ってなかったので改めて書いた、という感じです。

最近は (Docker ≒) コンテナ環境なんかで、メール送信はローカルの mail コマンド叩いたらちゃんと SMTP なり外部のサーバ参照する方がスジが良い (じゃないとコンテナ内の main.cf をビルド時にアレソレする手順が必要) ので、こういう対応はバッドノウハウになりつつある、と思うんですが一応自分の備忘録を兼ねて。