我正在寻找一种方法,让我的邮件用户完全管理自己的垃圾邮件培训。在开始之前,我的邮件服务器详细信息如下:
Debian 7.5、postfix 2.9.6、dovecot 2.1.7、amavisd-new 2.7.1、spamassassin 3.3.2
因此,每个域中的每个用户都有一个垃圾邮件文件夹 ( /var/vmail/domain/user/.Junk
),他们可以将不会被标记为垃圾邮件的垃圾邮件放入其中。然后我编写了以下脚本:
/etc/cron.daily/learnspam
#!/bin/sh
find /var/vmail -name .Junk -exec echo Examining {}... \; -exec sa-learn --dbpath=/var/lib/amavis/.spamassassin --spam {}/cur \;
我还有一个名为“False Positives”的文件夹,每个用户都可以将被错误标记为垃圾邮件的邮件拖进去,而且我还有一个每日脚本,它会将其识别为正常邮件并将其移回收件箱。
/etc/cron.daily/falsepos
#!/bin/sh
doveadm search -A mailbox 'False Positives' 2>/dev/null | while read user guid uid; do
doveadm fetch -u $user text mailbox-guid $guid uid $uid > /tmp/$guid-$uid.eml
doveadm move -u $user INBOX mailbox-guid $guid uid $uid
done
sa-learn --dbpath=/var/lib/amavis/.spamassassin --ham /tmp/*-*.eml
if ls /tmp/*-*.eml >/dev/null 2>&1; then
rm /tmp/*-*.eml
fi
我的问题是,我这样做对吗?有没有更好的方法?能sa-learn
与 amavis 配合使用吗?我想只要我使用该--dbpath=/var/lib/amavis/.spamassassin
选项,它就应该可以正常工作。
答案1
你可能想看看垃圾邮件。它与 Dovecot 集成,基本上可以完全按照您的要求执行,但是在移动操作发生时(移入垃圾邮件 => 垃圾邮件,移出垃圾邮件 => 误报)是动态的。
答案2
您的方法看起来不错;我也做了类似的事情。
两点评论:
- 使用
--dbpath
是好的,这可以防止常见的设置错误,其中 SA 使用一个 DB~amavis
并sa-learn
写入不同的 DB~root
。 - 关于多用户操作的一个设计限制:SpamAssassin 使用单个全局贝叶斯数据库 —— 而不是每个用户一个数据库。
答案3
Dspam 的贝叶斯过滤效果比 spam assassin 更好。许多其他过滤机制,如 RBL、灰名单和 DNS 有效性检查,都可以从 MTA(例如 postfix)进行配置。在这种方法中,您只在通过其他测试后才查看电子邮件内容,这使得系统资源消耗大大减少。您不会得到相同的加权组合,但如果设置得当,您可以获得一个非常好的垃圾邮件系统,它使用更少的 CPU 和 RAM。此外,dovecot 插件是通过在文件夹之间移动邮件来触发的,这比使用单独的文件夹进行训练要好得多。