メールサーバで宛先アドレスを書き換えたい

sendmail なメールサーバがある。いくつものAPがこのメールサーバを経由してメールを配信する仕組み。

さてリリース前の最終テストで本番と同様のメールアドレスまで仕込んだAP動かしてメール配信のロジック通ったらどうなる?ほんとの人にメール飛んじゃうよね?それはマズイ。

じゃあメールサーバのリレー止めるか?そうすると今度はほんとにメールが配信されてるか確認すんのがメンドクサイよね。

というわけで、AP側ではホンモノのアドレス宛にメールを発信動作する、それを受け取ったメールサーバで無理矢理行き先をねじ曲げて、自分らしか見れないメールボックスに全部放り込む。って動作をさせたい。

検索してみたらずばりそのような話のページがあった→ テスト用に、外にメールを送らないメールサーバをつくろう - お前の血は何色だ!! 4

ありがたやありがたやと同様の設定を施してみたけれども自分のところでは動かなかった。

~~@example.com あてに送信されたヤツ全部まとめて debug@example.com に転送したい。SMTP の RCPT TO: を変更したい。ヘッダの To: フィールドはオリジナルの情報を残したい。という要望なのだけど。

ちょっと sendmail のコトは詳しくないのでこれ以上時間かけても仕方なかろうと一旦停止。

この sendmail は何も書き換えせず単純にリレーするだけ。リレー先を一段増やしてここに postfix を立てた。postfix 内で書き換えてしまおうという作戦。

canonical_classes を envelope_recipient として、RCPT TO: だけを書き換え対象に絞り、recipient_canonical_maps で書き換えアドレスを列挙する。よしできた!

と思ってたらコレ、RCPT TO: 書き換えてくれるの良いけど、ヘッダの To: まで書き換えやがる。それはやめて欲しい。本来どこに行く予定だったかというのが知りたい。どうしたらいい。なぜヘッダまで手を出す。使えねえな。

と思ってたら、どうやら virtual_alias_maps を使えば良いらしいところまでたどり着いた。ここから先は未検証。またこんど。

追記

Postfix でメールの envelope recipient を書き換える