Linux

SendMail 如何決定記憶體哪些連接?

  • September 18, 2014

CentOS 5.x | 發送郵件 8.14.4

我正在努力思考連接記憶體在 Sendmail 中的工作原理。

我遇到了一些與我們經常通信的遠端郵件主機的連接問題,並且我們看到如下錯誤:

dsn=4.0.0 stat=Deferred: Connection timed out with <FQDN>

作為故障排除過程的一部分,我的防火牆人員想知道我的 SendMail 伺服器是否僅使用有狀態連接。

起初,我以為不是……但後來我想起​​了連接記憶體功能。我檢查了 /etc/mail/sendmail.cf 並確認存在以下選項:

O ConnectionCacheSize=2
O ConnectionCacheTimeout=5m

對我來說,這意味著 SendMail 將保持最多 2 個 SMTP 連接打開(每個 5 分鐘),以防更多郵件需要發送到那裡。

我的問題是:SendMail 如何決定記憶體哪些連接?這純粹是在第一次發送,第一次記憶體的基礎上嗎?還是記憶體機制背後有更複雜的邏輯?

AFAIK 在典型的 sendmail 配置中,連接記憶體不用於初始/第一次傳遞嘗試(可能除了當發送給太多收件人的消息被拆分為多條消息時)。在此類配置中,當 sendmail 重新嘗試傳遞排隊的消息時使用它。

恕我直言,在典型的輕負載電子郵件站點中,超過 95% 的傳出郵件可能會通過初始“一次”傳遞嘗試傳遞。


恕我直言,較大的電子郵件站點可能會考慮為最頂層的傳出目的地使用單獨的隊列組,並避免最初的“一次”傳遞嘗試(通常它通過一個 SMTP 連接發送一封電子郵件。

  • 持久隊列執行器可以減少這種“不立即傳遞”配置中的延遲。
  • 自定義郵件定義可能會跳過“一次”傳遞嘗試(F=e 昂貴標誌)並限制通過單個 smtp 連接發送的消息數量(m=)

隊列組(V8.12 及更高版本)

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