CentOS 5.x | SendMail 8.14.4
我正在尝试弄清楚 Sendmail 中的连接缓存是如何工作的。
我在与我们经常通信的一些远程邮件主机的连接上遇到了一些问题,并且我们看到了如下错误:
dsn=4.0.0 stat=Deferred: Connection timed out with <FQDN>
作为故障排除过程的一部分,我的防火墙人员想知道我的 SendMail 服务器是否仅使用有状态连接。
最初,我认为不是...但后来我想起了连接缓存功能。我检查了 /etc/mail/sendmail.cf 并确认存在以下选项:
O ConnectionCacheSize=2
O ConnectionCacheTimeout=5m
对我来说,这意味着 SendMail 将保持最多 2 个 SMTP 连接打开(每个 5 分钟),以防有更多消息需要发送到那里。
我的问题是:SendMail 如何决定缓存哪些连接?这纯粹是先发送、先缓存的原则吗?还是缓存机制背后有更复杂的逻辑?
答案1
据我所知,在典型的 sendmail 配置中,连接缓存不用于初始/第一次投递尝试(除非将发送给太多收件人的消息拆分成多条消息)。在此类配置中,当 sendmail 重试投递排队消息时,会使用它。
在我看来,在典型的轻负载电子邮件站点中,超过 95% 的外发邮件可以通过初始的“立即”传递尝试来传递。
我认为,较大的电子邮件网站可能会考虑使用单独的队列组作为最顶层的传出目的地,并避免初始的“一次性”传送尝试(通常它通过一个 SMTP 连接发送一封电子邮件)。
- 持久队列运行器可能会减少这种“非一次性交付”配置中的延迟。
- 自定义邮件程序定义可能会跳过“一次”传送尝试(F=e 昂贵标志)并限制通过单个 smtp 连接发送的消息数量(m=)