開発環境から外部へテストメールが飛ばないようにする


OSX/Linux の開発環境などからメール送信のテストをしたい場合などに、
rails なら letter_opener とか post_office が有名ですが、 gem が使えない環境(rails プロジェクト以外など)で、
どうしてもテストでメール送信せざるおえない場合に、 postfix の設定を書き換えて外部へのメールをすべてテスト用メールアカウントに送信する方法です。

例) [email protected] 宛のメールを全て [email protected] 宛として送信する

前提条件

Postfix 2.2 以上
example.com と example.co.jp は、実際に使ってるドメインに変更する。

Postfix の設定

@example.com 以外のメアドをすべて [email protected] に置換して送信する

sudo vim /etc/postfix/allmails_to_example.txt

!/.*@example.com$/ [email protected]

↑の正規表現で、@example.com 以外のメアドを、 [email protected] に送るルールになる

sudo vim /etc/postfix/main.cf

mail.cf に下記を追記する

local_header_rewrite_clients = static:all
# envelope_recipient: 実際に使用される送信先
# header_recipient: 見た目の送信先(送信先に使用されるわけではない)
canonical_classes = envelope_recipient, header_recipient
# メール表示上の宛先(header_recipient)だけは、置換しないで偽装する場合
#canonical_classes = envelope_recipient
canonical_maps = regexp:/etc/postfix/allmails_to_example.txt

再起動

sudo postfix stop
sudo postfix start

送信テスト

sendmail でローカルから [email protected] 宛に送信してみる。

$ sendmail [email protected]
From: [email protected]
To: [email protected]
Subject: test

test
.

[email protected] -> [email protected] に置換されて届いているか確認する。
届いて居なかったら /var/log/mail.log あたりに、fail が出ていないか確認する。