Postfixでメール送信テストを行う場合、本番の宛先へ誤ってメールを送らないように、外部配送を止めたい場合があります。
その場合、transport_maps を使って、一部のドメインだけ通常のSMTP配送を許可し、それ以外はローカル配送にします。
main.cf の設定
/etc/postfix/main.cf に以下を追加します。
# ローカル配送で不明なユーザを拒否しない
local_recipient_maps =
# ローカル配送で不明なユーザ宛のメールを指定ユーザへ転送する
luser_relay = devel@example.com
# 宛先ドメインごとに配送方法を変更する
transport_maps = hash:/etc/postfix/transport
transport ファイルの作成
cp -arp /etc/postfix/transport /etc/postfix/transport.org
vi /etc/postfix/transport
/etc/postfix/transport に以下を記載します。
# このホスト名宛は通常配送にする
mail.example.net :
# example.net 宛と、そのサブドメイン宛はSMTP配送する
example.net smtp:
.example.net smtp:
# example.org 宛と、そのサブドメイン宛はSMTP配送する
example.org smtp:
.example.org smtp:
# 上記以外の宛先はすべてローカル配送にする
* local:
transport.db の作成
transport ファイルを編集しただけでは反映されないため、postmap を実行します。
postmap /etc/postfix/transport
これにより、以下のDBファイルが作成されます。
/etc/postfix/transport.db
最後にPostfixを再読み込みします。
systemctl reload postfix
動作の意味
この設定では、宛先によって配送方法が変わります。
mail.example.net 宛 → 通常配送
example.net 系 → SMTP配送
example.org 系 → SMTP配送
その他すべて → ローカル配送
* local: に該当したメールは外部には配送されません。
また、ローカル配送先に存在しないユーザ宛のメールは、luser_relay で指定した devel@example.com に転送されます。
注意点
この設定は、あくまでテスト環境向けです。
example.net や example.org のように smtp: を指定したドメイン宛は、外部SMTP配送されます。
完全に外部へ送信したくない場合は、smtp: を指定するドメインを作らず、すべて local: にする必要があります。

コメント