CentOS 5.8 | Sendmail 8.14.4
我以前认为,如果 SendMail 在投递过程中遇到临时(400 级)错误,它会将邮件放入延迟队列(例如 /var/spool/mqueue)并在一小时后重试。在大多数情况下,情况似乎确实如此。但时不时地,我会注意到这样的日志条目(电子邮件/域名已重命名以保护无辜者 :-) ):
Dec 5 01:43:03 foobox-out sendmail [11078]: qBE3l7js123022: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=124588, relay=exbox.foo.com. [10.10.10.10], dsn=4.0.0, stat=Deferred: 421 4.3.2 The maximum number of concurrent connections has exceeded a limit, closing transmission channel
Dec 5 01:53:34 foobox-out sendmail [12763]: qBE3l7js123022: to=<[email protected]>, delay=00:10:31, xdelay=00:00:00, mailer=relay, pri=214588, relay=exbox.foo.com., dsn=4.0.0, stat=Deferred: 452 4.3.1 Insufficient system resources
Dec 5 02:53:35 foobox-out sendmail [23255]: qBE3l7js123022: to=<[email protected]>, delay=01:10:32, xdelay=00:00:01, mailer=relay, pri=304588, relay=exbox.foo.com. [10.10.10.10], dsn=2.0.0, stat=Sent (<[email protected]> Queued mail for delivery)
为什么 Sendmail 在第一次尝试后仅 10 分钟就再次尝试,然后又等待一个小时才再次尝试?
如果这是预期行为,那么哪些场景会导致这种更快的重新排队间隔发生?
答案1
您可以在 bat 书第 4 版第 29.9.99 节中阅读更多详细信息。底线是,大多数时候,经常无法传递的消息会继续失败。
因此,当邮件被放入队列时,sendmail 会根据 RecipentFactor 和 ClassFactor 计算其优先级,并首先处理优先级最低的邮件。失败的尝试会使用 RetryFactor 等进行调整。
同样,对于你的情况,452 会告诉机器将交付推迟到稍后。延迟多久取决于启动 sendmail 时 -q 旁边的值。