Smtp

此 SMTP 對話的哪一方是正確的?

  • March 7, 2018

我有一個奇怪的場景,兩台郵件伺服器相互通信,需要幫助確定哪一台執行正確。

解釋起來有點複雜,所以我認為 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 命令之後,所有狀態都會重置,無論郵件消息是被接受還是被拒絕。

第 4.1.1.4 節

收到郵件數據結束指示需要伺服器處理儲存的郵件交易資訊。該處理消耗反向路徑緩衝區、正向路徑緩衝區和郵件數據緩衝區中的資訊,並且在該命令完成時這些緩衝區被清除。如果處理成功,接收者必鬚髮送一個 OK 回复。如果處理失敗,接收者必鬚髮送失敗回复。

(強調我的)

這不是一個新的要求。RFC 2821 也說了同樣的話


根據輸出,我猜該設備有一個損壞的 milter,它正在搞砸郵件處理。Sendmail 通常單獨獲得 RFC 合規性權利。

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