2台のメールサーバを用意して、1台目のメールサーバで送信を行った際、
相手のメールサーバから送信エラー(250以外)になった場合、2台目の
メールサーバで再送を試みる設定を模索しています。
postfixの設定で「smtp_fallback_relay」を見つけ設定してみましたが、
2台目のメールサーバーに転送されず、バウンスされてしまいます。
なにか他に良い設定がありませんでしょうか?
相手のメールサーバから送信エラー(250以外)になった場合
250 番以外といっても、400 番台と 500 番台では扱いが違います。
400 番台であれば「一時的なエラー」という扱いになるので、smtp_fallback_relay への転送を試しますが、500 番台であれば「恒久的なエラー」という扱いになるので、そもそも、これ以上どこかに転送しても届かないメール(例えば、そもそも存在しないメールアドレス)なので、エラーメールを作って差出人へ送るのが正しい動作になります。
postfixの設定で「smtp_fallback_relay」を見つけ設定してみましたが、
2台目のメールサーバーに転送されず、バウンスされてしまいます。
1台目へ送ろうとした際に 500 番台のエラーであれば、その時点でバウンスされるのは正しい動作になります。
500 番台のエラーを無視して別のサーバに転送、というのは...、さすがに出来ないと思いますが...。
追記:
しかし、550エラーでも、IPでブロックされて送信できない場合があり、2台目からであれば、届く可能性があるため、1台目でバウンスさせたくありません。
実際の動作を確認してませんが、Ver 2.7 以降で、smtp_reply_filter というのが使えるようになってます。
Postfix Configuration Parameters
これを使うと、受け取った応答メッセージを別のメッセージに変換して処理をさせる事が出来るようです。なので、5xx のメッセージを受け取っても、4xx のメッセージを受け取ったように見せかける事が出来るはずです。
このフィルタの結果で、意図した通り、smtp_fallback_relay へ送られるかどうかは分かりませんが、ちらっとソースを見た感じだと、応答メッセージに対する処理の割と早い段階でフィルタが適用さるので、出来そうな気がします。
ただ、フィルタの記述を間違えると、例えば、本来はエラーメールがすぐに帰ってことを期待する User Unknown のケースも一時エラー扱いになって、何日も再送を試みる、といったケースもありそうなので、慎重な設定が必要だと思います。
2台目のサーバで main.cf の mynetworks_style, mynetworks を確認してみてください。ここで 1台目のサーバが含まれるような設定とすることで、 "trust" されどんな宛先のメールでも受け取るようになります。
例えば、リレー元のメールサーバの IP アドレスが 192.0.2.100 なら以下のようになります。
mynetworks = 127.0.0.0/8, 192.0.2.100
デフォルトの mynetworks_style = subnet で上手く動いていないということは VPS のたぐいで動かしているものと推測し上記の例を挙げました。自宅サーバなどで配下サブネットからのメール配送も受け付けたい場合には適切なサブネットを追加して下さい。
ご回答、ありがとうございます。
mynetworksの設定で、同じセグメント内のサーバーになるので、
セグメント単位で許可しております。
ご回答、ありがとうございます。
再度、テストした結果、ご指摘の通り、451で有れば2台目にリレーされ、
550エラーだった場合は、バウンスされました。
しかし、550エラーでも、IPでブロックされて送信できない場合があり、
2台目からであれば、届く可能性があるため、1台目でバウンスさせたく
ありません。
PostfixをVer 2.7以降にして試したいと思います。
情報ありがとうございます。