Amazon SESをrelayhostとして使用するためのPostfixの設定
PostfixからSESにメールを投げる方法は2種類ある
- STARTTLSを使用する方法
- SMTPsを使用する方法
Postfix自体の設定はSMTPsを使う方がシンプルであるが、
SMTPsを使用する場合はStunnelという別のデーモンが必要になる。
STARTTLSはPostfixだけ(別のモジュールは使うが・・・)の設定で使用できるので、
今回はSTARTTLSを使う方式を選んだ。
STARTTLSを使用する場合のメールの流れ
-----------Webサーバ---------------
|webアプリ,cron,etc... -> Postfix | -> SES -> 宛先
----------------------------------
↑ この通信でSTARTTLSする
前提
必要なパッケージ(debian squeezeの場合)
- postfix
- libsasl2-modules
設定
# /etc/postfix/main.cf
relayhost = [email-smtp.us-east-1.amazonaws.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/ses_sasl
smtp_sasl_security_option = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
relayhost
は外向けメールの送信先SMTPサーバ
FQDNを囲んでいる[]は無くても動くかも
OP25Bな環境でなければ25でも動くかも
# /etc/postfix/ses_sasl
[email-smtp.us-east-1.amazonaws.com]:587 AUTHUSERNAME:AUTHPASSWORD
AUTHUSERNAME:AUTHPASSWDにはSMTP認証のID/PASSを入力する
sudo postmap /etc/postfix/ses_sasl
上記コマンドで/etc/postfix/ses_sasl.db
ファイルが生成される
設定が完了したら、postfixを再起動
/etc/init.d/postfix restart
以上の手順で、外向きのメールがSES経由で送信されるようになる
その他、注意
- ヘッダのFrom: 及び Envelope-fromのアドレスがVerifiedである必要がある
- 相手に届くメールのReturn-pathはamazonses.comのものに書き換えられている
SES 公式ドキュメント
確認環境 : Debian GNU/Linux 6.0(squeeze)