クラウド型のメール(Office365やGmail)の普及により、最近は自身でメールサーバーを構築する機会が減ってきました。急激に用途が変わって来たことを感じます。
全てのメールキューを強制再送信する場合は次のとおりです。
# postqueue -f
詳細については、後述を確認ください。
メールサーバーでの重要なこと
今までの重要なことはメール受信に関する事でした。
- スパムメールを受け取らないこと
- 不正中継されないこと
昨今の重要なことはメール送信に関する事です。
- スパムメール扱いされないこと
- メール再送処理を上手くやること
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のメール再送信の流れ
文字にして表すとこんな感じです。
- メール送信に失敗する
- メールをdeferredキューにする
- queue_run_delay(300秒)毎にdeferredキューをチェックする
- minimal_backoff_time(300秒)を過ぎたメールがあれば送信する
- メール送信に失敗したらminimal_backoff_timeの2倍(600秒)時間に送信する
- メール送信に失敗したらminimal_backoff_timeの4倍(1200秒)時間に送信する
- maximal_backoff_time(4000秒)を超えるまで繰り返す
- maximal_queue_lifetime(5日)を超えてたら処理を終了する
- bounce_queue_lifetime(5日)を超えたら送信元にエラーメールを送信する
時系列で表すとこんな感じです。
- メール送信に失敗する
- 300s(queue_run_delay)
- 600s(minimal_backoff_timeの2倍)
- 1,200s(minimal_backoff_timeの4倍)
- 繰り返し
- 4,000s(maximal_backoff_time)
- 8,000s
- 繰り返し
- 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 [email protected] (delivery temporarily suspended: Host or domain name not found. Name service error for name=xxx.xx.jp type=MX: Host not found, try again) [email protected]
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