关于 MX 记录和邮件传递的问题?

slm*_*slm 2 dns smtp email

假设我们在 DNS 记录中有多个邮件服务器。如果有人正在发送邮件,外发邮件服务器将检查 MX 并联系成本最低的第一台服务器。

如果此服务器没有请求的邮件地址,会发生什么?外发邮件服务器是否将邮件发送到 MX 记录中的第二个邮件服务器?或者这取决于第一个邮件服务器的错误消息?

如何处理发送到“未知地址”的消息?通过第一台服务器尝试将它们传送到适当的 MX 邮件服务器,还是 MX 邮件服务器尝试解决这个问题?

Dra*_*oan 5

处理邮件传递的 SMTP 和 ESMTP(底层协议)具有广泛的 RFC(最初是 RFC821,以及更现代的更新 RFC2821 和 RFC5321 中的 Internet 标准跟踪协议)。

邮件服务器如何处理传递过程中的错误,因邮件服务器而异。更复杂的是,其中很多都是可配置的,并且很容易更改 RFC 中概述的默认行为。

鉴于上述注意事项,一般的经验法则是:

选择最高偏好的 MX 记录,如果存在多个相同偏好的记录,则随机选择一个(有时随机行为是一种循环算法)。如果所选主机“无法访问”(没有到主机的路由、连接被拒绝或类似),请尝试相同或更低首选项的下一个 MX 记录。正如 msw 所提到的,这些是一些违反直觉的 - 最高优先级是 0,而数字越大的记录被认为优先级越低

重复此操作,直到建立连接,或者所有主机都无法响应,在这种情况下,电子邮件将重新排队以备以后尝试重新发送。大多数邮件服务器会尝试此操作一段时间(通常大约为 1 到 2 天),然后才会放弃并在未送达报告 (NDR) 中返回电子邮件。

如果连接成功的,在RFC协议的各个步骤决定了连接的MTA的一般行为。从由远程邮件服务器发送的初始横幅,每个颁发给它(从各种命令的EHLO/ HELO,通过MAIL FROMRCPT TODATA语句),一般的经验法则是:

4xx 暂时性错误,请稍后重试

使用此代码,电子邮件由本地邮件服务器重新排队并稍后尝试发送(在该本地邮件服务器的设置中配置)

5xx 致命错误,邮件无法投递

使用此代码,电子邮件被视为无法投递,本地发送邮件服务器将(并非总是如此,但在大多数服务器上)生成 NDR(未投递报告)。

就您的问题“如果此服务器没有请求的邮件地址”而言,在RCPT TO阶段,大多数服务器会以5xx代码进行响应,而您的本地邮件服务器会生成 NDR。

并非所有电子邮件服务器都生而平等

对此有一些注意事项。MS Exchange 在最长的时间内,将接受所有电子邮件,无论收件人不正确、无法路由的域等,然后在事后生成 NDR。由于垃圾邮件问题和称为Back Scatter 的现象,某些 ISP甚至不会生成 NDR,并且您的邮件“无声无息地失败”(您永远不会收到任何投递失败的通知)。

您还必须考虑到 MTA(邮件传输代理或邮件服务器)并不总是交付和 MDA(邮件交付代理 - 例如 procmail)和 MUA(邮件用户代理)或“邮件客户端”的终点”,例如thunderbird/outlook 等,可以配置为使用它们自己的类似 NDR 的响应“返回”这些电子邮件。还有诸如.forward文件之类的机制,可以让 MTA 在接受电子邮件后将电子邮件重定向到另一个地址。某些邮件服务器(我知道 Exim 就是这种情况),将尝试在 SMTP 会话阶段扩展该.forward点,RCPT TO如果扩展到具有上述5xx一系列错误代码的不可路由地址回复。

要获得更准确和深入的解释,请阅读上面提到的 RFC 和您正在使用的 MTA 的文档(请记住,它的配置方式可能会影响其行为)。