以下のようなエラーに遭遇して対応したメモです。
Sep 11 05:24:09 host1 postfix/smtp[23693]: xxxxxxxxxxxx: to=<a@domain.com>, relay=xxxx.domain.com[xxx.xxx.xxx.xxx]:25, delay=xxxxx, delays=xxxxx, dsn=xxxxxx, status=deferred (conversation with xxxxx.xxx.ne.jp[xxx.xxx.xxx.xxx] timed out while sending end of data -- message may be sent more than once)
こんなエラー。
まずは、status=deferredなのでメールは送られていない。
そして、「timed out while sending end of data — message may be sent more than once」 そのまま訳すと「データの最後まで送っている間にタイムアウトした。メッセージは1回以上送信されたかもしれない。」となる。
対応としてできるのは以下でしょうか。
1, deferredでキューに溜まったメールの破棄。
2, 対策設定の追加
3, timed out while sending end of data — message may be sent more than once の根本原因を探す。
1, deferredでキューに溜まったメールの破棄。(前提として、そのメールを削除してよい場合となる。)
ちなみに、送信したメールのステータスは以下の3つになる。
status=sent 送信完了 status=bounce 送信失敗 status=deferred 送信リトライ
deferredステータスのメールは、メールキューに格納されている。
今回はpostfix だったので以下のように確認・削除をする。
基本的な確認は以下で可能。
格納場所 /var/spool/postfix/ 設定ファイル /etc/postfix/main.cf /etc/postfix/master.cf
確認方法
# postcat -q [キューID]
主なメールキューの種類は以下。
maildrop ローカル配信に使用される
incoming 送受信処理中のメールが保持される
active 配信待ちメールが保持される
deferred 送信に失敗したメールがしばらく保持される
ちなみにこれらはメモリには保管されず、サーバ内に保管されるためキュー待ち状態で再起動をした場合には、データが消える事になるのだろう。。。
メールキューの操作コマンド
以下のコマンドで確認から削除までを実施してみる。
キューを削除 # postsuper -d [キューID] キューをすべて削除 # postsuper -d ALL deferred 残っているキューの確認 # postqueue -p
これで、キューを消して上げることで、スムーズに送信が始まればOK。
2, 対策設定の追加
キューに溜まったメールの再送設定を見直してみます。
基本的に以下の項目を変更してみます。
値については、自分はこんな感じにしてみました。
minimal_backoff_time = 120s maximal_backoff_time = 600s maximal_queue_lifetime = 24h bounce_queue_lifetime = 24h queue_run_delay = 100s
こちらの意味はこのサイトの説明が良くわかります。ありがとうございます。
http://d.hatena.ne.jp/kidpatrick/20090912
再送に関係する設定は以下
minimal_backoff_time (デフォルト1000秒)
maximal_backoff_time (デフォルト4000秒)
maximal_queue_lifetime (デフォルト5日)
bounce_queue_lifetime (デフォルト5日)
queue_run_delay (デフォルト1000秒) 失敗から再送までのpostfixの動きは、送信失敗 deferredに入れる
queue_run_delay(1000秒)毎にdeferredをチェック
minimal_backoff_time(1000秒)を超えるメールがあれば送信
また失敗したらminimal_backoff_timeの倍(2000秒)の時間後に再送
またまた失敗したらminimal_backoff_timeの倍の倍(4000秒)の時間後に再送
maximal_backoff_time(4000秒)を超えるまでこれを繰り返し
maximal_backoff_timeを超えてしまったら、maximal_backoff_time間隔で再送
maximal_queue_lifetime(5日)を超えてしまったら再送をあきらめる
bounce_queue_lifetime(5日)を超えたら送信もとにエラーメール送信
3, timed out while sending end of data — message may be sent more than once の根本原因を探す。
何度送っても同じ現象が出るのであれば、原因特定はし易いでしょうが、そうでない限り特定は難しいところだとは思います。
以下を参考にしました。
Postfixで特定のドメイン宛へのメール配信が遅延し、キューに大量にたまる:やみれんらぼ:So-netブログ