Smtp
此 SMTP 對話的哪一方是正確的?
我有一個奇怪的場景,兩台郵件伺服器相互通信,需要幫助確定哪一台執行正確。
解釋起來有點複雜,所以我認為 SMTP 對話可能是描述它的最簡單方式。在這種情況下,mailserver1.foo.com 試圖將消息傳遞給 securityappliance.foo.com。
SMTP 工作流程如下所示:
220 securityappliance.foo.com ESMTP Sendmail 8.14.4/8.14.4; Tue, 6 Mar 2018 14:21:53 -0800 EHLO mailserver1.foo.com 250-securityappliance.foo.com Hello mailserver1.foo.com [1.1.1.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-DELIVERBY 250 HELP MAIL FROM:<footestuser@foo.com> 250 2.1.0 <footestuser@foo.com>... Sender ok RCPT TO:<recipient@foo.com> 250 2.1.5 <recipient@foo.com>... Recipient ok DATA 354 Enter mail, end with "." on a line by itself X-Example-Header-Blah: Blah From: <footestuser@foo.com> To: <recipient@foo.com> Subject: Message #1. I expect this to fail and am not concerned about that. Extra text/attachments. . 550 5.3.0 Requested action on message failed; message rejected MAIL FROM:<completelydifferentsender@completelydifferentmessage.com> 557 5.3.0 Milter Implementation Error: Invalid argument passed
因此,我們有兩條消息作為同一個 SMTP 連接的一部分在單個文件中傳遞。第一條消息導致 550 錯誤(我們知道為什麼會這樣)。然後上游郵件伺服器立即送出另一個
MAIL FROM:
命令,但被拒絕(因為安全設備認為它是同一事務的一部分。上游伺服器是否需要
RSET
在發送完全獨立的消息之前發出命令?或者接收安全設備是否應該了解電子郵件完全不同,而不是將其視為消息 #1 的一部分?我希望這是有道理的。我很樂意澄清。我正在嘗試確定哪個最終實體是正確的,以便我可以使用適當的支持資源。
設備壞了。
RFC 5321 非常清楚,在 DATA 命令之後,所有狀態都會重置,無論郵件消息是被接受還是被拒絕。
收到郵件數據結束指示需要伺服器處理儲存的郵件交易資訊。該處理消耗反向路徑緩衝區、正向路徑緩衝區和郵件數據緩衝區中的資訊,並且在該命令完成時這些緩衝區被清除。如果處理成功,接收者必鬚髮送一個 OK 回复。如果處理失敗,接收者必鬚髮送失敗回复。
(強調我的)
這不是一個新的要求。RFC 2821 也說了同樣的話。
根據輸出,我猜該設備有一個損壞的 milter,它正在搞砸郵件處理。Sendmail 通常單獨獲得 RFC 合規性權利。