テスト環境などで意図せずメール誤爆しないようにメール送信先ドメインを制限したいことがあります。
ぐぐったところ設定方法はいろいろあるようですが、rejectしちゃうとアプリケーション側にエラーが返ってしまって困るケースがあったので、受け付けて捨てる方法で設定します。
例として @example.com
にはメールを許可するけど、その他のドメイン宛は捨てる設定は以下のとおりです。postfixは2.6系です。
/etc/postfix/main.cf
に以下の設定を追加します。
transport_maps = hash:/etc/postfix/transport
/etc/postfix/transport
に以下の設定を追加します。
ローカル配送も不要な場合はlocalの行もなくてよいかもです。
example.com smtp:
localhost local:
localhost.localdomain local:
* discard: "discard received email"
transportファイルをコンパイルします。
[root]$ postmap /etc/postfix/transport
[root]$ echo $?
0
postfixの設定をリロードします。
[root]$ /etc/init.d/postfix reload
postfix を再読み込み中: [ OK ]
設定は以上です。
試しにsendmailコマンドで疎通確認してみます。
[root]$ echo "mail test1" | sendmail -f no-reply@myhost.example.com -t hoge@example.com
[root]$ echo "mail test1" | sendmail -f no-reply@myhost.example.com -t hoge@gmail.com
hoge@example.com
にメールが届いて、 hoge@gmail.com
にメールが届かなければ成功。
ログで確認すると /var/log/maillog
にこんな感じの出力が出てる。
Jan 27 14:47:13 myhost postfix/smtp[26538]: 9A42F42B1D: to=<hoge@example.com>, relay=smtp.example.com[XXX.XXX.XXX.XXX]:25, delay=1.1, delays=0.02/0/0.41/0.68, dsn=2.0.0, status=sent (250 2.0.0 OK 1453873633 lm9si7024058pab.142 - gsmtp)
Jan 27 14:47:29 myhost postfix/discard[26551]: 9D42342B1D: to=<hoge@gmail.com>, relay=none, delay=0.02, delays=0.01/0/0/0, dsn=2.0.0, status=sent ("discard received email")
これでメール誤爆しなくて安心してテストできますね。
参考
postfixのsmtpd_recipient_restrictionsの宛先制限はsendmailコマンド使用時には有効にならない