我有一个奇怪的场景,两台邮件服务器相互通信,需要帮助确定哪一台运行正确。
解释起来有点复杂,所以我认为 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:<[email protected]>
250 2.1.0 <[email protected]>... Sender ok
RCPT TO:<[email protected]>
250 2.1.5 <[email protected]>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
X-Example-Header-Blah: Blah
From: <[email protected]>
To: <[email protected]>
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:<[email protected]>
557 5.3.0 Milter Implementation Error: Invalid argument passed
因此,我们有两条消息作为同一个 SMTP 连接的一部分在单个文件中传递。第一条消息导致 550 错误(我们知道为什么会这样)。然后上游邮件服务器立即提交另一个MAIL FROM:
命令并被拒绝(因为安全设备认为它是同一事务的一部分。
上游服务器是否需要RSET
在发送完全独立的消息之前发出命令?或者接收安全设备是否应该了解电子邮件完全不同,而不是将其视为消息 #1 的一部分?
我希望这是有道理的。我很乐意澄清。我正在尝试确定哪个最终实体是正确的,以便我可以使用适当的支持资源。
设备坏了。
RFC 5321 非常清楚,在 DATA 命令之后,所有状态都会重置,无论邮件消息是被接受还是被拒绝。
从第 4.1.1.4 节:
(强调我的)
这不是一个新的要求。RFC 2821 也说了同样的话。
根据输出,我猜该设备有一个损坏的 milter,它正在搞砸邮件处理。Sendmail 通常单独获得 RFC 合规性权利。