我正在阅读有关 sendmail 的 access_db 功能的文章。显然,它看起来很有希望成为阻止垃圾邮件的预防措施。
我有几个关于如何使用 access_db 的问题。基本上,我在 access 文件中指定一组规则,然后 sendmail 将检查这个数据库,看看是否应该对电子邮件执行任何操作。
- 不符合任何指定规则的邮件怎么办?默认行为是什么?
- 我可以使用正则表达式吗?例如,“To:*@spam.com REJECT”可以吗?
- 如果我只有“paypal.com RELAY”,是否意味着我的 sendmail 将接受和发送来自或发往 paypal.com 的电子邮件?
多谢!
答案1
- 如果某条规则与 access_db 中的规则不匹配,则不会影响邮件的接受或拒绝。邮件将继续由其余规则处理。
- 描述了 access_db(以及任何通配符,但不是正则表达式)这里。如果您想要正则表达式,您要么必须编写自己的规则集来模仿 access_db 行为,但使用正则表达式映射,要么使用 milter,例如MIME去方, 或者milter-regex。
- 最好使用以 或 开头的规则,
From:
而Connect:
不是简单的 IP 地址或域,这样就不必考虑该规则是关于连接到您的主机的主机的域名,还是发件人地址的域名(它们不一定相同)。
答案2
如何在 Sendmail 中使用正则表达式
我收到了所有数字域名(例如 3456.com)的垃圾邮件,起初我在 access.db 中添加了 10,000 个条目,这太荒谬了。
在您的 sendmail.mc 文件的底部,邮件程序之后,您可以添加如下正则表达式。
LOCAL_CONFIG
Kallnumbers regex -a@MATCH @[0-9]+\.com
LOCAL_RULESETS
SLocal_check_mail
R$+ $: $(allnumbers $1 $)
R@MATCH $#error $: "550 Rejected."
您可以逐字复制大部分内容,只需更改一些内容。
定义你的正则表达式并赋予它一个标识符,在其前面加上K
我的标识符是allnumbers
和我的正则表达式是[0-9]+\.com
Kallnumbers regex -a@MATCH @[0-9]+\.com
最后两个定义匹配项和采取的行动
R$+ $: $(allnumbers $1 $)
R@MATCH $#error $: "550 Rejected.
我意识到那看起来很像 cf,但它属于 mc。