SMTP服務檢測
我有一些關於 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_time、maximal_backoff_time和queue_run_delay。