op25b環境でPostfixのメール再送間隔を設定してみた
最近土偶サーバーが配信している「お天気メール」が15分以上遅れることが多い。
土偶家が加入しているプロバイダは「Outbound port 25 Blocking」を採用しているので、土偶家のメールサーバーは内部ネットワークから外部ネットワークへのメール送信時に、プロバイダーのSMTP経由しなければいけない状態になっている。
で、ログやらメールキューを見ていると、プロバイダのSMTPサーバーが接続された時に、時々「今無理やしまた後から試してね。」てな感じで土偶メールサーバーの接続を拒否していた。
土偶の環境ではリレーホストがプロバイダのSMTPサーバーになっているので、リレーホストの無いSMTPサーバーのようにエラーのキューは後回しにして次のキューをというわけには行かず、この状態になると先頭のキューが処理されるまで全てのメールキューが待ち状態になってしまう。
拒否された一通の後の全てのメールがその影響をこうむって遅延してしまうわけである。
拒否されてはいるものの今までメールが遅延はしても非着になった事は無いので、次の接続時には拒否されずに送信出来たということなのやろう。
この遅延時間が、数秒とか最悪数分ならまだいいものの、ログを見る限り16から20分ほどの遅延とちょっと長すぎる。
そういうわけで再送信までの間隔を変更しようと調べてみた。
結果、Postfixは相手SMTPがエラーになった場合、「minimal_backoff_time」に設定された値だけ待った後に再送信を繰り返し、それが「maximal_backoff_time」の値になると、以後は「maximal_queue_lifetime」の値になるまで、「maximal_backoff_time」間隔でリトライする。という仕様になっているらしい。
デフォルトではminimal_backoff_time=1000s、maximal_backoff_time=4000s、main.cfに明示的な設定は無いものの、postconfコマンドで見ると確かにそうなっている。
つまりエラーがあると16.6666…分後にリトライするようだ。
時間的にも土偶サーバーの遅延時間と合致する。でもってこれでは長すぎるので、main.cfにはとりあえず、minimal_backoff_time=60s maximal_backoff_time=600s maximal_queue_lifetime=6000sと書いておいた。
送信エラーがあった場合1分間隔で10分までリトライし、それ以降は10分ごとに1時間までリトライする。
という感じである。
とやって見たものの、それほどメールの遅延は改善されていないっぽい…
「Outbound port 25 Blocking」なISP内の野良メールサーバのメールの遅延に困っている人は試してみてはいかがだろうか?
postfix reload した後に、postconfでちゃんと値が設定されているのを確認しておこう。
お役に立ててて良かったです。(^_^)v
ツッコミありがとうございます。
ほんまですねぇ100分と言うことで1時間40分でした。ボケてますなぁ(-_-;)
初めまして。
とても参考になりました。ありがとうございます。
細かいツッコミで申し訳ないのですが、
>maximal_queue_lifetime=6000s
>1時間までリトライする
これって2時間弱ぐらいですよね。