我正在使用 exim 传递由 Web 应用程序生成的邮件。gmx.net、gmx.de 和 web.de 域要求我限制我发送的邮件数量,但我无法在 exim 中进行配置。
场景是这样的:
- 我的网络应用程序生成电子邮件
- 它们通过 phpmailer 提交给在 localhost 上运行的 exim
- exim 立即将它们放入队列中(我
queue_smtp_domains = web.de : gmx.de : gmx.net
在配置中) - 在每次队列运行(每小时)时,它都会尝试传递邮件
- 在成功交付后,这两个域中的每一个都返回 421 错误代码(1.1.1.1 是我在原始日志条目中的 IP 地址,我在这里替换了它)。Exim 声称在连接到服务器后发生错误:
2019-09-12 14:50:41.157 [19619] 1i8OYb-00056H-01 H=mx01.emig.gmx.net [212.227.17.5]:25: SMTP error from remote mail server after initial connection: 421-gmx.net (mxgmx115) Nemesis ESMTP Service not available\n421-Service unavailable\n421-Reject due to policy restrictions.\n421 For explanation visit http://postmaster.gmx.com/en/error-messages?ip=1.1.1.1&c=irlims
他们建议降低发送率的链接。这就是我想要做的。
每三个小时,在相同的错误消息再次出现之前,接收邮件服务器就会接受固定数量的邮件。
我发现了一个问题,但看起来 acls 会在第 2 步进行速率限制,我不希望这样。我想在第 4 点进行速率限制。并且仅适用于有问题的两个域。
我还在exim 中找到了特殊重试规则的文档。但是我只想在域和错误代码匹配时应用特殊规则,并且在我看来我无法匹配连接时的错误 421(只有作为 MAIL 或 DATA 或 RCPT 命令的回复才能匹配它) .
如何在 exim 中配置这种限制,或者如何让这些邮件以更快的速度被接受?
我在 exim 邮件列表中找到了这个线程。
他们讨论了节流的不同技巧和解决方法,包括
exim -M
)一个相当粗略的解决方案:
(如果这也会导致限制发送到其他邮件服务器,请替换
DROP
为)REJECT
此示例适用于 gmx+web.de(联合互联网)- 他们不仅使用 421,而且从本月开始使用 554 代码,这会导致邮件丢失。此外,他们似乎从本月开始重置了我们 IP 的例外情况。这一次的支持也绝对没有交流。我们开始警告用户不要使用 gmx/web.de。这发生在一个拥有超过 5000 名成员的教育领域的非营利慈善机构。
主机上的邮件服务器重试投递大约一周。