OSX/Linux の開発環境などからメール送信のテストをしたい場合などに、
rails なら letter_opener とか post_office が有名ですが、 gem が使えない環境(rails プロジェクト以外など)で、
どうしてもテストでメール送信せざるおえない場合に、 postfix の設定を書き換えて外部へのメールをすべてテスト用メールアカウントに送信する方法です。
例) hoge@example.co.jp 宛のメールを全て test@example.com 宛として送信する
前提条件
Postfix 2.2 以上
example.com と example.co.jp は、実際に使ってるドメインに変更する。
Postfix の設定
@example.com 以外のメアドをすべて test@example.com
に置換して送信する
sudo vim /etc/postfix/allmails_to_example.txt
!/.*@example.com$/ test@example.com
↑の正規表現で、@example.com 以外のメアドを、 test@example.com に送るルールになる
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 でローカルから hoge@example.co.jp 宛に送信してみる。
$ sendmail hoge@example.co.jp
From: info@example.co.jp
To: hoge@example.co.jp
Subject: test
test
.
```
hoge@example.co.jp -> test@example.com に置換されて届いているか確認する。
届いて居なかったら /var/log/mail.log あたりに、fail が出ていないか確認する。