SpamAssassin运行shell命令的自定义规则



我在SpamAssassin上读了一段时间,学到了很多东西,但我似乎找不到一种方法,我找不到创建一个规则的方法,在这个规则中,可以为自定义规则执行第三方脚本。THI必须是基于用户而非全球的。

我想对域和电子邮件地址运行额外的验证。

我希望建立一个信誉系统,在这个系统中,如果一个域或电子邮件地址与联系人列表和其他内容进行检查。

我曾考虑过修改配置文件以添加regex规则,但这似乎是一种复杂的方法。更可取的方案是简单地运行第三方脚本,返回每个域和电子邮件地址的分数。

开箱即用,SpamAssassin没有这样的功能,但由于你在编程网站上询问,我认为你对自己编写一些代码并不陌生。

SpamAssassin中的插件功能就是为这类事情而设计的。您可以创建一段Perl代码,为SpamAssassin分析的每条消息调用该代码,并且您可以访问Perl可以访问的所有内容。

特别是pyzor插件,它调用外部程序并将分析结果返回给SpamAssassin。这里有相当多的样板,但您需要从为helper_app_pipe_open调用获取正确的参数开始(从3.4.0版本开始,在第282行,这就是我在上面链接的内容)。这些东西是可配置的,因此您甚至可以将pyzor的路径重新配置为自己的程序,作为概念验证。请注意,它需要接受check参数和其他一些参数,以及来自其标准输入上的临时文件的消息。

Mail::SpamAssassin::Plugin.pm包含插件API的POD文档。模块树中的其他文件也包含有用的文档;特别是,您可能需要参考Mail::SpamAssassin.pm和Mail::SpamAssassin::Conf.pm中的常规文档,以了解可以传递给插件的配置参数。

开箱即用,有一个新的TxRep插件可以自动识别您最近看到的发件人。还有一组白名单和黑名单选项。

如果你想自己实现一些东西,我想你很快就会发现exec机制的伸缩性不好。也许可以尝试制作自己的DNSBL。这可以通过自定义代码和任何DNS服务器(例如bind、dnsmasq等)或为此目的设计的DNS服务器(如RBLDNSD)来完成。DnsBlocklists上的SA wiki提供了如何将其挂接到SA的说明。

通常,寻求这种解决方案的人没有正确配置DNSBL。在尝试建立自己的项目之前,我会先研究一下。

最新更新