我有一个关于 MX 记录主题的简短问题。
假设我们的 DNS 记录中有多个邮件服务器。如果有人发送邮件,外发邮件服务器将检查 MX 并联系成本最低的第一个服务器。
假设这是一个交换服务器。如果该服务器没有请求的邮件地址,那么会发生什么?传出邮件服务器是否将邮件发送到 MX 记录中的第二个邮件服务器?或者这取决于第一个邮件服务器的错误消息?
Exchange 如何处理发送到“未知地址”的消息?
答案1
假定域的 MX 记录中列出的所有邮件服务器完全能够将邮件传递给域中的任何用户。如果一台服务器响应“未知地址”消息,Exchange [或任何其他邮件服务器] 将认为该消息无法送达,并根据其设置进行处理。
IIRC 默认情况下,Exchange 会向发件人生成退回邮件,但也可以配置为丢弃邮件。
注意:发送邮件服务器只有在其选择的服务器为域的 MX 记录中的备用服务器时才会尝试联系反应迟钝。
答案2
处理邮件传送的 SMTP 和 ESMTP(底层协议)具有广泛的 RFC(最初是 RFC822,以及更现代的更新 RFC2822 和 RFC5322 中的 Internet 标准跟踪协议)。
邮件服务器在传送过程中处理错误的方式因邮件服务器而异。更复杂的是,其中许多都是可配置的,并且很容易更改 RFC 中概述的默认行为。
考虑到上述注意事项,一般经验法则是:
选择最高优先级 MX 记录,如果存在多个具有相同优先级的记录,则随机选择一个 MX 记录(有时随机行为是一种循环算法)。如果所选主机“无法访问”(没有到主机的路由、连接被拒绝或类似情况),请尝试下一条相同或更低优先级的 MX 记录。正如 msw 所提到的,这些是一些违反直觉的东西 - 最高优先级是 0,并考虑更高数量的记录较少的优惠。
重复此操作,直到建立连接,或者所有主机都无法响应,在这种情况下,电子邮件将重新排队以供稍后尝试重新投递。大多数邮件服务器会尝试执行此操作一段时间(通常为 1 到 2 天),然后放弃并以未送达报告 (NDR) 的形式返回电子邮件。
如果连接是成功后,RFC 协议的各个步骤决定了连接 MTA 的一般行为。从远程邮件服务器发送的初始横幅,到向其发出的每个命令(从EHLO
/ HELO
、到MAIL FROM
和语句),一般经验法则是:RCPT TO
DATA
4xx 暂时错误,请稍后重试
使用此代码,电子邮件将由本地邮件服务器重新排队,并在稍后尝试发送(在该本地邮件服务器的设置中配置)
5xx 致命错误,邮件无法送达
使用此代码,电子邮件将被视为无法送达,并且本地发送邮件服务器将(并非总是如此,但在大多数服务器上)生成 NDR(未送达报告)。
就您的问题“如果此服务器没有请求的邮件地址”而言,在RCPT TO
阶段,大多数服务器都会用5xx
代码进行响应,并且您的本地邮件服务器将生成 NDR。
并非所有电子邮件服务器都是一样的
对此有一些注意事项。 MS Exchange 在最长的时间里会接受所有电子邮件,无论收件人不正确、无法路由的域等等,然后在事后生成 NDR。某些 ISP 由于垃圾邮件问题和称为后向散射,甚至不生成 NDR,您的邮件就会“默默地失败”(您永远不会收到任何投递失败的通知)。
您还必须考虑到 MTA(邮件传输代理或邮件服务器)并不总是传递的端点,MDA(邮件传递代理 - 例如 procmail)和 MUA(邮件用户代理)或“邮件客户端” ” 例如 Thunderbird/Outlook 等可以配置为“返回”这些电子邮件及其自己的类似 NDR 的响应。还有诸如.forward
文件之类的机制,可以让 MTA 在接受电子邮件后将电子邮件重定向到另一个地址。某些邮件服务器(我知道 Exim 就是这种情况)将尝试在SMTP 会话阶段.forward
扩展,如果扩展为不可路由的地址,则会回复上述一系列错误代码。RCPT TO
5xx
要获得更准确和更深入的解释,请阅读上面提到的 RFC 和您正在使用的 MTA 的文档(请记住,它的配置方式可能会影响它的行为)。