我们为我们的一位客户提供一项服务,即向他们的客户发送声明。不幸的是,我们的客户对电子邮件地址的验证并不总是最好的,因此当他们向我们提交一批邮件时,我们通常会看到很多邮件由于常见域名的拼写错误而无法发送(例如 gnail.com、htmail.com 等)。我们收集退回的邮件,以便提供给我们的客户来修复他们的电子邮件列表,但在退回/NDR 发生之前,这些邮件将保留在我们的 postfix mailq 中,直到它们达到队列到期时间。一次又一次地重试发送。
有没有好的方法让 postfix 在第一次失败时立即发送这些消息的 NDR,而不是一次又一次地尝试?我们只希望这种情况发生在坏域上,但有时,我们会看到由于灰名单而被延迟的消息,并且它们在第二次尝试时发出。
我已经尝试过我的 Google-foo,但是它似乎无法完成这项任务......
答案1
首先通过添加reject_non_fqdn_recipient
和reject_unknown_recipient_domain
到适当的限制表来拒绝完全无效的邮件。
Postfix 还可以REJECT
通过check_recipient_mx_access
和发送消息check_recipient_access
,但如何生成适当的查找取决于您可以接受的错误级别(拒绝非拼写错误/不拒绝拼写错误)。
最好不要将邮件发送到收件人域中较小的Levensthein 距离到更受欢迎的收件人域名。指定接收者和声音相似的目标之间的音量差异越大,接收者是预期接收者的可能性就越小(运营一个大型电子邮件服务并不意味着几乎喜欢gmail.com
)。
对我来说更简单且有用的是一个pcre
表格,其中硬编码了最常见的错误输入的域名,例如:
# reject recipient MX table
typosquatter.example REJECT
shady-data-broker.example REJECT
# reject recipient domain table
# skip the correct one
example.com DUNNO
# broadly reject all minor permutations
..ample.com REJECT
ex..ple.com REJECT
exa..le.com REJECT
# ...
example.co REJECT
我通过从不同时匹配 TLD 更改和排列,将误报率保持在可接受的水平——所有大收件人听起来都与其他合法企业不太相似。为什么这对我来说足够了,即使我没有匹配所有排列?因为 90% 的拼写错误都属于同一组 5% 的可能排列,所以它捕获了最多拼写错误。
如果您有至少几个月的日志,那么您可能只需从连接超时中 grep 队列超时,手动删除误报并完成列表,就像我上面所做的那样,就可以获得一个很好的开始。