これ。
雰囲気
雰囲気としては以下のような感じ。
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
なぜこのような記事を?
これ 2015 年とかそのあたり? に構築したインスタンスで、aws-ses とか aws-rails 系の gem も未成熟で、まだ AWS SES もバージニア北部 (us-east-1) 限定だった頃の設定なんすけど、まあわりとそんな環境が多いのと、過去記事にしたはずが残ってなかったので改めて書いた、という感じです。
最近は (Docker ≒) コンテナ環境なんかで、メール送信はローカルの mail コマンド叩いたらちゃんと SMTP なり外部のサーバ参照する方がスジが良い (じゃないとコンテナ内の main.cf をビルド時にアレソレする手順が必要) ので、こういう対応はバッドノウハウになりつつある、と思うんですが一応自分の備忘録を兼ねて。