我的备份邮件服务器吞掉了一大堆邮件,我想配置一个简单的服务器来发送450
所有消息。
但是,我不确定这是否是个好主意,因为如果重试时的发送服务器不尝试发送到更高优先级的服务器,则消息永远无法传递。
我在 RFC 中没有找到关于此的任何内容,但是服务器是否会在优先级更高的服务器上重试,或者永远尝试在响应的同一服务器上进行操作450
?
答案1
当 SMTP 传送失败时(无接球永久5xy
负面完成 SMTP 响应)并且没有定义备用/备份 MX,IIRCRFC 将其留给发送方实现是否再次尝试投递,以及后续投递尝试的频率和持续时间。标准还让发送方自行决定是否和临时送货延迟通知多久退回至原始寄件人,和/或永久递送失败错误通知的速度有多快被返回。
当有多个MX 记录为收件人域定义,则对于每次投递尝试,符合标准的发件人应尝试依次投递到所有 MX 记录并遵守其优先级,直到其中一个 MX 接受该邮件(发件人收到2xx
肯定完成 SMTP 响应),或者其中一个 MX 拒绝该邮件(带有永久5xy
否定完成 SMTP 响应)或直到所有记录都已联系。
当所有(主或备份)MX 记录均未永久接受或拒绝您域的邮件消息时,我预计会遵循与不存在备用 MX 记录的情况相同的、发件人实现特定的故障路径。换句话说:“发送者可能会将消息放入队列以便稍后尝试发送,或者放弃”。
做或不做
您自己控制的多个 MX 记录和备份邮件服务器的整个概念在于您可以控制它,而不必依赖原始发件人的排队和重试策略或其缺失。
当你不想要那种控制时;当您不希望备份 MX 对您的邮件进行排队,而是希望将排队和重试投递留给发件人时,根本就不要配置备份 MX 记录。这应该具有与设置指向仅产生错误且实际上不会接受和排队您的电子邮件的服务器的备份 MX 相同的效果(如果不是更好的效果)。
我认为备份 MX 的预期目的
当您的主服务器离线和/或由于停机或计划维护而变得不可用时,RFC 和发件人对 SMTP 协议的正确实施应确保发送到您的域的电子邮件被发送到您的备份 MX,邮件将被接受并排队,直到(计划的)停机结束。
您的备份邮件服务器(而不是发件人)将控制是否/何时将邮件传递延迟/失败通知发送给原始发件人。
停机结束并且您的主邮件服务器和邮箱再次上线后,您可以刷新备份 MX 上的队列并(几乎)立即收到所有排队的邮件。使用东印度公司例如 SMTP 命令。
答案2
正如 jcaron 的评论所建议的:
是否有理由让第二个 MX 发送 450?什么都没有(即没有服务器在该端口上应答,或者根本没有列出第二个 MX)应该会得到相同的结果,并且工作量会更少……但请注意,无论解决方案是什么,发件人都不会永远保留邮件。虽然许多人会重试几天,但有些人的超时时间会短得多(有些人会在第一次出现错误时将您的地址列入黑名单!)
解决 XY 问题的正确方法是不要备份 MX。永远不需要有多个 MX。每个合法发件人都会重试投递超过一天,通常超过一周。如果您的服务器停机并且无法立即接受邮件,那么将其作为发送方的邮件系统的责任,而不是一些粗略的第三方排队服务,显然是正确的做法。这不仅可以避免您的邮件被“吃掉”,还可以避免信任第三方有权拦截您的邮件,并确保在极长时间的停机导致其邮件无法投递的情况下,发件人将收到通知(通过他们自己的邮件系统)。
至于你的实际问题,SMTP 的重试工作方式尚未明确规定,我不确定是否存在保证合规的发件人在发现无法访问您的主 MX 后会循环尝试,而不是继续尝试向报告临时故障的虚假辅助 MX 投递。因此,即使没有上述原因,您不应该有一个辅助 MX,我认为尝试这种特定的破解方法不是一个好主意。
如果有的话,我的经验是 22 多年来连续运行个人/小型站点邮件系统,并且从未使用过多个 MX。