blogですかい

株式会社Loco Partnersに勤めるエンジニアうちの一人のブログ。仕事、プライベートで学んだことなどを発信し、その内容がたとえ少数でも誰かの役に立ったらなら、それはとっても嬉しいなって

Amazon SESをrelayhostとして使用するためのPostfixの設定

PostfixからSESにメールを投げる方法は2種類ある
- STARTTLSを使用する方法
- SMTPsを使用する方法

Postfix自体の設定はSMTPsを使う方がシンプルであるが、
SMTPsを使用する場合はStunnelという別のデーモンが必要になる。
STARTTLSはPostfixだけ(別のモジュールは使うが・・・)の設定で使用できるので、
今回はSTARTTLSを使う方式を選んだ。

STARTTLSを使用する場合のメールの流れ

-----------Webサーバ---------------
|webアプリ,cron,etc... -> Postfix | -> SES -> 宛先
----------------------------------
                                    ↑ この通信でSTARTTLSする

前提

  • Verified Sendersの設定は済んでいる
  • SMTP Settingsにて、My SMTP Credentialsを作成済である
    上記設定についてはこちらを参照

必要なパッケージ(debian squeezeの場合)

設定

# /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)