SMTP 服务检测

SMTP 服务检测

我对 SMTP 连接有一些基本问题,特别是针对 Postfix,但也希望得到有关 MS Exchange 的建议:

  • 当给定远程域的单个中继不可用时,向该域发送邮件的 Postfix mta 会多久检查一次服务是否可用?
  • 失败的连接会被“记住”(即缓存)吗?
  • 当“较高优先级”中继可用时,Postfix 是否会检查“较低优先级”中继是否在线?
  • 上述任何一个都可以在 Postfix 中调整吗?

答案1

免责声明:此答案仅使用互联网上的一些 Postfix 文档,因此我可能遗漏了一些事实。如需更好更准确的文档,请随意在 Postfix 邮件列表中发布问题(Wietse Venema 是该列表中的活跃成员)或查看 Postfix 源代码。

以上所有问题都集中在后缀退避算法。首先,我将尝试解决目的地死亡问题

以下是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 确实对已死目标主机有缓存。要控制此行为,请调整qmgr_message_recipient_limit范围

qmgr_message_recipient_limit(默认值:20000)

Postfix 队列管理器在内存中保存的最大收件人数量,以及内存中短期“死亡”目标状态缓存的最大大小。

那么 Postfix 何时检查主机是否处于活动状态?Postfix 仅在有消息时尝试连接到主机活动队列上面有目的地。除此之外,postfix 不会主动检查主机是否恢复正常。

如果主主机不可用或 Postfix 从远程主机获取错误代码 4xx,则 Postfix 仅检查优先级较低的 MX 主机。其他 MTA 在获取 4xx 错误代码时会采取不同的行为,因为只要 MTA 可用,它们可能永远不会尝试连接到辅助 MX 主机可以连接到主要主机。请参阅:postfix 目标已满/忙/错误 尝试另一个目标Exchange 不向第二个 MX 发送电子邮件


关于消息重试时间,如果无法传递消息,postfix 会将消息放入延迟队列,直到bounce_queue_lifetime(对于 postfix 生成的退回)或maximal_queue_lifetime(对于其他情况)。如上所述,只有当 qmgr 将其放入活动队列时,postfix 才会再次重新传递。以下是来自postfix 文档关于后缀调度算法。

每次延迟队列扫描仅带来一小部分延缓队列回到活动队列进行重试。这是因为延迟队列中的每条消息在延迟时都会被分配一个“冷却”时间。这是通过将队列文件的修改时间扭曲到未来来实现的。如果队列文件的修改时间尚未到达,则不符合重试条件。

“冷却”时间至少为 ,$minimal_backoff_time最多为$maximal_backoff_time。下一次重试时间的设置方法是将消息在队列中的年龄加倍,然后上下调整以使其处于限制范围内。这意味着新消息的初始重试次数要高于旧消息。

因此,如果您想调整重试时间,请随意使用参数最小退避时间最大退避时间队列运行延迟

相关内容