postfixのメール再送信と、再送メールキューの動作

クラウド型のメール(Office365やGmail)の普及により、最近は自身でメールサーバーを構築する機会が減ってきました。急激に用途が変わって来たことを感じます。

メールサーバーでの重要なこと

今までの重要なことはメール受信に関する事でした。

  • スパムメールを受け取らないこと
  • 不正中継されないこと

昨今の重要なことはメール送信に関する事です。

  • スパムメール扱いされないこと
  • メール再送処理を上手くやること

Postfixの初期設定

postconfコマンドにて設定値を確認することが出来ます。

# postconf

postfixのメール送信失敗から再送までに関するパラメーターは次の通りです。

queue_run_delay = 300s
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
maximal_queue_lifetime = 5d
bounce_queue_lifetime = 5d

Postfixのメール再送信の流れ

文字にして表すとこんな感じです。

  1. メール送信に失敗する
  2. メールをdeferredキューにする
  3. queue_run_delay(300秒)毎にdeferredキューをチェックする
  4. minimal_backoff_time(300秒)を過ぎたメールがあれば送信する
  5. メール送信に失敗したらminimal_backoff_timeの2倍(600秒)時間に送信する
  6. メール送信に失敗したらminimal_backoff_timeの4倍(1200秒)時間に送信する
  7. maximal_backoff_time(4000秒)を超えるまで繰り返す
  8. maximal_queue_lifetime(5日)を超えてたら処理を終了する
  9. bounce_queue_lifetime(5日)を超えたら送信元にエラーメールを送信する

時系列で表すとこんな感じです。

  1. メール送信に失敗する
  2. 300s(queue_run_delay)
  3. 600s(minimal_backoff_timeの2倍)
  4. 1,200s(minimal_backoff_timeの4倍)
  5. 繰り返し
  6. 4,000s(maximal_backoff_time)
  7. 8,000s
  8. 繰り返し
  9. 432,000s(maximal_queue_lifetime)

maximal_queue_lifetimeの5日は長いですね。5日遅れのメールが来ても嬉しくありません。逆に問題になってしまいます。

Postfixのメール再送信の設定

メールの再送信する間隔は難しいですね。早すぎると送信先のメールサーバーからスパム扱いされてしまいます。よって間隔値は変更せず、終了値のみを変更する事にしました。

maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d

メールキューの確認、再送と削除の方法

メールキューの確認

# postqueue -p
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
14A4B1086C1F    75632 Thu Aug 22 08:41:18  hogehoge@xxx.xx.jp
(delivery temporarily suspended: Host or domain name not found. Name service error for name=xxx.xx.jp type=MX: Host not found, try again) hogehoge@xxx.xx.jp

sendmail時代のコマンドも互換があります。私は古い人間なので使いなればsendmail時代のコマンド(mailq)を使ってしまいます。

メールキューの削除

メールキューの削除は「特定メールの削除」と「キュー全体の削除」を行う事ができます。

特定メールキューを削除する場合は、キューの一覧からキューIDを取得し削除します。

# postsuper -d 14A4B1086C1F[キューID]
postsuper: 14A4B1086C1F: removed
postsuper: Deleted: 1 message

全てのメールキューを削除する場合は次のとおりです

# postsuper -d ALL
postsuper: Deleted: 123 message

メールキューの強制再送信

やり過ぎるとスパム扱いされますので気を付けましょう。
メールキューの強制再送信は「特定メールの強制再送信」と「キュー全体の強制再送信」を行う事ができます。

特定メールキューを強制再送信する場合は、キューの一覧からキューIDを取得し削除します。

# postqueue -i 14A4B1086C1F[キューID]

全てのメールキューを強制再送信する場合は次のとおりです。

#  postqueue -f

コメント