5. Address Resolution and Mail Handling (地址解析与邮件处理)
5.1. Locating the Target Host (定位目标主机)
一旦SMTP客户端从词法上识别出将向其传递邮件以进行处理的域 (如第2.3.5节和第3.6节所述),必须 (MUST) 执行DNS查找以解析域名 (RFC 1035 [2])。这些名称应该是完全限定域名 (FQDNs, Fully-Qualified Domain Names): 从部分名称或本地别名推断FQDN的机制超出了本规范的范围。由于历史问题,用于初始提交消息的SMTP服务器不应该 (SHOULD NOT) 进行此类推断 (消息提交服务器 [18] 具有更大的灵活性),中间 (中继) SMTP服务器禁止 (MUST NOT) 进行此类推断。
查找首先尝试定位与该名称关联的MX记录。如果找到CNAME记录,则将结果名称当作初始名称处理。如果返回不存在域错误,则必须 (MUST) 将此情况报告为错误。如果返回临时错误,则必须 (MUST) 将消息排队并稍后重试 (参见第4.5.4.1节)。如果返回空的MX列表,则将该地址视为与隐式MX RR关联,优先级为0,指向该主机。如果存在MX记录,但它们都不可用,或隐式MX不可用,则必须 (MUST) 将此情况报告为错误。
如果为给定名称找到一个或多个MX RR,SMTP系统禁止 (MUST NOT) 使用与该名称关联的任何地址RR,除非它们是使用MX RR定位的; 只有在不存在MX记录时,上述"隐式MX"规则才适用。如果存在MX记录,但它们都不可用,则必须 (MUST) 将此情况报告为错误。
当查找与MX RR关联的域名并获得关联的数据字段时,该响应的数据字段必须 (MUST) 包含域名。当查询该域名时,必须 (MUST) 返回至少一个地址记录 (例如,A或AAAA RR),该记录给出消息应定向到的SMTP服务器的IP地址。任何其他响应,特别是包括查询时将返回CNAME记录的值,都超出了本标准的范围。RFC 2181第10.3节 [38] 更详细地讨论了禁止数据中解析为CNAME的标签。
当查找成功时,由于多个MX记录、多宿主或两者兼有,映射可能会产生备用传递地址列表,而不是单个地址。为了提供可靠的邮件传输,SMTP客户端必须 (MUST) 能够按顺序尝试 (并重试) 此列表中的每个相关地址,直到传递尝试成功。然而,也可以 (MAY) 对可以尝试的备用地址数量有一个可配置的限制。在任何情况下,SMTP客户端应该 (SHOULD) 至少尝试两个地址。
两种类型的信息用于对主机地址进行排名: 多个MX记录和多宿主主机。
MX记录包含优先级指示,如果出现多个此类记录,则必须 (MUST) 用于排序 (参见下文)。较低的数字比较高的数字更受青睐。如果有多个具有相同优先级的目的地,并且没有明确的理由偏向其中一个 (例如,通过识别易于到达的地址),则发送方SMTP必须 (MUST) 将它们随机化,以将负载分散到特定组织的多个邮件交换器上。
目标主机 (可能取自首选MX记录) 可能是多宿主的,在这种情况下,域名解析器将返回备用IP地址列表。如果必要,域名解析器接口有责任按偏好递减顺序对此列表进行排序,SMTP发送方必须 (MUST) 按呈现的顺序尝试它们。
虽然需要尝试多个备用地址的能力,但特定安装可能希望限制或禁用使用备用地址。发送方是否应该使用多宿主主机的不同地址尝试重试的问题一直存在争议。使用多个地址的主要论点是它最大化了及时传递的概率,实际上有时是任何传递的概率; 反驳论点是它可能导致不必要的资源使用。请注意,资源使用还很大程度上由第4.5.4.1节中讨论的发送策略决定。
如果SMTP服务器接收到一个目的地为其指定邮件交换器的消息,它可以 (MAY) 中继该消息 (可能在重写MAIL FROM和/或RCPT TO地址后)、最终传递该消息,或使用SMTP提供的传输环境之外的某些机制将其交出。当然,后两者都不需要进一步检查MX记录列表。
如果它确定应该在不重写地址的情况下中继消息,它必须 (MUST) 对MX记录进行排序以确定传递候选者。首先按优先级对记录进行排序,优先级编号最低的记录最受青睐。然后,中继主机必须 (MUST) 检查列表中它在邮件事务中可能已知的任何名称或地址。如果找到匹配记录,则必须 (MUST) 从考虑中丢弃该优先级级别和更高编号的所有记录。如果此时没有剩余记录,则这是错误条件,并且必须 (MUST) 将消息作为不可传递返回。如果确实有剩余记录,则应该 (SHOULD) 如上所述尝试它们,首先尝试最佳优先级。
5.2. IPv6 and MX Records (IPv6和MX记录)
在现代互联网中,SMTP客户端和服务器可能托管在IPv4系统、IPv6系统或与任一版本互联网协议兼容的双栈系统上。因此,MX记录指向的主机域可能包含"A RR" (IPv4)、"AAAA RR" (IPv6) 或它们的任何组合。虽然RFC 3974 [39] 讨论了混合环境中的一些运营经验,但它不够全面,无法证明标准化的合理性,并且其一些建议似乎与本规范不一致。要采取的适当操作将取决于本地情况,例如相关网络的性能和可能需要的任何转换,或者将是显而易见的 (例如,仅IPv6的客户端无需尝试查找A RR或尝试到达仅IPv4的服务器)。可能在IPv6或双栈环境中运行的SMTP实现的设计者应该研究上述程序,特别是关于多宿主主机的注释,并且最好提供机制以促进IPv4和IPv6系统之间的操作调整和邮件互操作性,同时考虑本地情况。