Postfix

SMTP服務檢測

  • May 13, 2015

我有一些關於 SMTP 連接的基本問題,特別是對於 Postfix,但也希望得到 MS Exchange 的建議:

  • 當給定遠端域的單個中繼變得不可用時,向該域發送郵件的後綴 mta 多久檢查一次以查看服務是否可用?
  • 失敗的連接是否被“記住”(即記憶體)?
  • postfix 是否曾經檢查“低優先級”中繼是否線上,而“高優先級”中繼是否可用?
  • 上述任何一個都可以在後綴中調整嗎?

免責聲明:此答案僅使用網際網路上的一些後綴文件,所以也許我在這裡錯過了一些事實。要獲得更好和準確的文件,請隨時在 postfix 郵件列表中發布問題(Wietse Venema 是該列表中的活躍人員)或查看 postfix 原始碼。

以上所有問題都集中在後綴退避算法上。首先,我將嘗試解決死去的問題

這裡的相關部分man 8 qmgr

STRATEGIES
  The queue manager implements a variety of strategies for either opening
  queue files (input) or for message delivery (output).
  ...
  destination status cache
         The queue manager avoids unnecessary delivery attempts by  main-
         taining  a  short-term,  in-memory  list of unreachable destina-
         tions.

綜上所述,postfix 確實對死去的目的主機有記憶體。要控制這種行為,請調整qmgr_message_recipient_limit參數

qmgr_message_recipient_limit(預設值:20000)

> > Postfix 隊列管理器在記憶體中保存的最大收件人數,以及短期記憶體中“死”目標狀態記憶體的最大大小。 > > >

那麼當後綴檢查主機是否還活著?Postfix 僅在活動隊列中有消息且其上有目的地時才嘗試連接到主機。除此之外,postfix 不會主動檢查主機是否還活著。

Postfix 僅檢查優先級較低的 MX 主機,如果主要主機不可用或 postfix 從遠端主機獲取錯誤程式碼 4xx。其他 MTA 在收到 4xx 錯誤程式碼時表現不同,因為只要 MTA可以連接到主要主機,它們就可能永遠不會嘗試連接到輔助 MX 主機。請參閱:postfix 目標已滿/忙/錯誤嘗試另一個目標Exchange 不向第二個 MX 發送電子郵件


關於消息重試時間,postfix 將把消息放到延遲隊列中,如果它無法傳遞直到bounce_queue_lifetime(對於 postfix 生成的退回)或maximal_queue_lifetime(對於其他)。如上所述,只有在 qmgr 將其放入活動隊列時,postfix 才會再次重新發送。這裡是postfix docs關於postfix調度算法的相關摘錄。

每次延遲隊列掃描僅將延遲隊列的一部分帶回活動隊列進行重試。這是因為延遲隊列中的每條消息在延遲時都被分配了一個“冷卻”時間。這是通過將隊列文件的修改時間時間扭曲到未來來完成的。如果尚未達到其修改時間,則隊列文件不符合重試條件。

“冷靜”時間至少是$minimal_backoff_time,最多是$maximal_backoff_time。下一次重試時間是通過將消息在隊列中的年齡加倍來設置的,然後向上或向下調整以位於限制範圍內。這意味著新消息最初比舊消息更頻繁地重試。

因此,如果您想調整重試時間,請隨意使用參數minimum_backoff_timemaximal_backoff_timequeue_run_delay

引用自:https://serverfault.com/questions/691387