我们的组织有几台服务器,它们会生成和发送大量电子邮件(我们不是垃圾邮件发送者,这是合法的电子邮件,发送给要求发送邮件的用户)。这些机器上的 Exim 配置为仅尝试发送一次邮件,如果失败,则将电子邮件交给将继续尝试的溢出中心服务器。我刚刚向这个群添加了一台新服务器,并将其添加到我们的 SPF 记录中,并将其配置得与我们的其他服务器完全一样。但是,我们肯定在 Google 的黑名单或更可能是灰名单中,可能是因为这个新服务器的网络块声誉不佳,因为发送到 gmail 帐户的电子邮件总是在第一次尝试时失败并出现断开连接错误。我尝试手动发送到 gmail 地址,如果允许进行多次尝试,这可以正常工作,我可以看到第一次尝试失败,然后第二次尝试成功,没有问题。但是,正如我所说,我们不会对系统进行第二次尝试。
问题是,我最终得到了一堆 Exim 进程,它们一直在等待 Google 断开连接,我猜这最终会耗尽机器上的内存(它是一个虚拟机,所以只有 512M 的 RAM),然后内核的 OOM_killer 开始终止进程,我们丢失了应该发出的电子邮件。
我并不指望能很快摆脱 Google 的灰名单,所以我能看到的真正解决方案是弄清楚如何让 Exim 进程尽快放弃,这样我就不会耗尽内存。Exim 配置中有没有办法做到这一点?或者只是限制系统上运行的 Exim 进程总数?请注意,这些是单独的 Exim 进程,由我们的自定义邮件生成软件触发,它们不是主 Exim MTA 的子进程。我在 Exim 文档中没有看到任何似乎解决这两个问题的内容。
注意:我已经尝试使用 hubbed_hosts 让 Exim 甚至不尝试访问 google 目的地,但这不起作用。也许我的 hubbed_hosts 文件的格式错误?就是这样(域名已混淆):
.*google.com: bulkflow.mydomain.org
.*gmail.com: bulkflow.mydomain.org
如果我错了并且可以修复它,也许这就是答案。
答案1
.*
从您的 hubbed_hosts 文件中删除,纯gmail.com
文本等是正确的。
此外,检查优秀的文档并查找诸如queue_run_max
、queue_load_max
和queue_only
之类的项目smtp_receive_timeout
。
请注意,exim 在正确处理消息方面非常出色,即使处理消息的进程被终止,消息仍将保留在队列中,因此不必担心丢失消息。
我每天使用 exim 传递数十万封电子邮件,并且 exim 提供了大量的调整参数以使一切顺利运行。