此 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:<[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 的一部分?

我希望这说得通。我很乐意为您解释。我正在尝试确定哪个终端实体是正确的,以便我能够联系到合适的支持资源。

答案1

该电器坏了。

RFC 5321 明确指出,在 DATA 命令之后,所有状态都会重置,无论邮件消息是被接受还是被拒绝。

第4.1.1.4节

收到邮件数据结束指示需要服务器处理存储的邮件事务信息。此处理会消耗反向路径缓冲区、正向路径缓冲区和邮件数据缓冲区中的信息,该命令完成后,这些缓冲区将被清除如果处理成功,接收方必须发送 OK 回复。如果处理失败,接收方必须发送失败回复。

(重点是我的)

这不是一个新的要求。RFC 2821 说一样的东西


根据输出,我猜想该设备的邮件过滤器坏了,导致邮件处理出现问题。通常情况下,Sendmail 本身就能正确遵循 RFC 规范。

相关内容