
我有一個備份郵件伺服器吃掉了一堆訊息,我只想配置一個簡單的伺服器來發送450
所有訊息。
但是,我不確定這是一個好主意,因為如果重試時的發送伺服器不嘗試發送到更高優先順序的伺服器,則訊息永遠無法傳遞。
我在 RFC 中沒有找到任何與此相關的內容,但是伺服器是否會在更高優先級的伺服器上重試,還是在響應 的同一台伺服器上永遠嘗試450
?
答案1
當 SMTP 傳送失敗時(沒有永久接收5xy
否定完成 SMTP 響應)且沒有定義備用/備份 MX,IIRCRFC 將其留給發送者實現是否再次嘗試投遞以及後續投遞嘗試的頻率和持續時間。該標準還將其留給發送者實現,如果並且臨時交貨延遲通知多久後退回原始寄件者和/或永久性遞送失敗錯誤通知的速度有多快被返回。
當超過 1 個時MX記錄是為收件者網域定義的,那麼對於每次傳送嘗試,符合標準的寄件者應嘗試傳送到所有MX 記錄,一個接一個,並尊重其優先級,直到其中一個MX 接受訊息(寄件者收到2xx
肯定完成 SMTP 響應),或一個 MX 拒絕該訊息(帶有永久5xy
否定完成 SMTP 回應)或直到聯繫完所有人。
當沒有(主和/或備份)MX 記錄永久接受或拒絕您的網域的郵件訊息時,我希望在不存在備用 MX 記錄的情況下遵循相同的、特定於寄件者實現的失敗路徑。我換句話說:“寄件者可以將訊息排隊以供稍後嘗試發送或放棄”。
做或不做
您自己控制下的多個 MX 記錄和備份郵件伺服器的整個概念是您可以控制它,並且不必依賴原始寄件者的排隊和重試策略,或不依賴原始寄件者的排隊和重試策略。
當你不想要這種控制時;當您不希望備份 MX 對郵件進行排隊,但希望將排隊和傳送重試留給寄件者時,只需根本不配置備份 MX 記錄即可。這應該與設定指向僅產生錯誤且實際上不會接受您的電子郵件並將其排隊的伺服器的備份 MX 具有相同的效果(如果不是更好的話)。
恕我直言,備份 MX 的預期目的
當您的主伺服器因停機或計劃維護而離線和/或變得不可用時,RFC 和寄件者正確實施 SMTP 協定應確保將發送到您的網域的電子郵件發送到您的備份MX,在(在計劃的)中斷結束之前,郵件將被接受並排隊。
您的備份郵件伺服器(而不是寄件者)將控制是否/何時將郵件傳遞延遲/失敗通知發送給原始寄件者。
一旦中斷結束並且您的主郵件伺服器和郵箱再次聯機,您就可以刷新備份 MX 上的佇列並(幾乎)立即接收所有排隊的郵件。隨著ETRN例如 SMTP 命令。
答案2
正如 jcaron 評論中所建議的:
是否有理由讓第二個 MX 發送 450 秒?什麼都沒有(即沒有伺服器在該連接埠上應答,或者根本沒有列出第二個MX)應該具有相同的結果並且會減少工作量...但請注意,無論採用什麼解決方案,寄件者都不會永遠保留郵件。雖然許多人會重試幾天,但有些人的超時時間要短得多(有些人會在第一次錯誤時將您的地址列入黑名單!)
解決 XY 問題的正確方法是不要使用備份 MX。永遠不需要擁有多個 MX。每個合法寄件者都會在一天以上(通常是一週以上)的時間內重試投遞。如果您的伺服器停機並且無法立即接受郵件,那麼將其留給發送方的郵件系統而不是一些粗略的第三方排隊服務來負責,顯然是正確的做法。它不僅可以避免您的郵件被「吃掉」;它還避免信任有權攔截您的郵件的第三方,並確保在極長的中斷導致郵件無法投遞的情況下,寄件者將收到通知(透過他們自己的郵件系統)。
至於您的實際問題,重試如何用於 SMTP 未明確說明,我不確定是否有任何保證合格的寄件者在發現主 MX 無法存取後會返回嘗試主 MX,而不是繼續嘗試向偽造的輔助 MX 發送報告臨時故障。所以即使沒有上述推理為什麼你不應該有一個輔助 MX,我認為嘗試這個特殊的 hack 是個壞主意。
如果相關的話,我在這方面的經驗是連續運行個人/小型站點郵件系統超過 22 年,並且從未使用過多個 MX。