我有一些关于SMTP连接的基本问题,特别是对于Postfix,但是也会对MS Exchange的build议感到高兴:
免责声明:这个答案只使用在互联网上的一些后缀文件,所以也许我错过了这里的一些事实。 为了更好和更精确的文档,请随时在postfix邮件列表(Wietse Venema是该列表中的活跃人士)中发布问题或查看postfix源代码。
以上所有问题都集中在后缀退避algorithm上 。 首先,我将尝试解决死亡destionation问题
这里是man 8 qmgr的相关部分
STRATEGIES The queue manager implements a variety of strategies for either opening queue files (input) or for message delivery (output). ... destination status cache The queue manager avoids unnecessary delivery attempts by main- taining a short-term, in-memory list of unreachable destina- tions.
基于上述情况,postfix确实拥有对目标主机的caching。 要控制此行为,请调整qmgr_message_recipient_limit参数 。
qmgr_message_recipient_limit(默认:20000)
Postfix队列pipe理器在内存中保存的最大收件人数以及短期内存“死”目标状态caching的最大大小。
所以当postfix检查主机是否还活着? 如果邮件中有目的地的活动队列 ,Postfix只会尝试连接到主机。 除此之外,postfix将不会主动检查主机是否回来。
Postfix只检查较低优先级的MX主机,如果主要主机不可用或postfix从远程主机获取错误代码4xx。 其他MTA在得到4xx错误代码时的performance会有所不同,因为只要MTA 可以连接到主要主机,它们可能永远不会尝试连接到辅助MX主机。 请参阅: postfix目标完全/繁忙/错误尝试另一个目标 , Exchange不发送电子邮件到第二个MX
关于消息重试时间,postfix将消息传递到延迟队列,直到bounce_queue_lifetime (对于由postfix生成的反弹)或maximal_queue_lifetime (对于其他消息) maximal_queue_lifetime 。 如上所述,如果qmgr把它放在活动队列中,postfix只会重新发送。 这里有关postfix文档的相关摘录,介绍postfix调度algorithm。
每个延迟队列扫描仅将一部分延迟队列重新放回到活动队列中以便重试。 这是因为延迟队列中的每个消息在被延迟时被分配一个“冷却”时间。 这是通过时间扭曲队列文件的修改时间来完成的。 如果尚未达到修改时间,则队列文件不适合重试。
“冷静”时间至less是
$minimal_backoff_time,最多$maximal_backoff_time。 下一个重试时间是通过在队列中将消息的年龄加倍来进行设置的,并且可以通过向上或向下调整来达到限制。 这意味着年轻消息最初比旧消息更频繁地重试。
因此,如果您想调整重试时间,请随意使用参数minimal_backoff_time , maximal_backoff_time和queue_run_delay进行播放 。