我正在寻找一种方法让我的邮件用户完全管理他们自己的垃圾邮件培训。在我开始之前,我的邮件服务器详细信息:
Debian 7.5,后缀 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,他们可以将被错误标记为垃圾邮件的邮件拖入其中,我也有一个每日脚本,它将其学习为 ham 并将其移回他们的收件箱。
/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
选项,它应该可以正常工作。
您可能想看看dspam。它与 Dovecot 集成,基本上完全符合您的要求,但在移动操作发生时(移入垃圾邮件 => 垃圾邮件,移出垃圾邮件 => 误报)。
你的方法看起来不错;我做类似的事情。
两个备注:
--dbpath
很好,可以防止常见的设置错误,其中 SA 使用数据库~amavis
并sa-learn
写入~root
.Dspam 比垃圾邮件刺客更好地进行贝叶斯过滤。许多其他过滤机制,如 RBL、灰名单和 DNS 有效性检查,可以从 MTA 配置(例如 postfix)。在这种方法中,您只在通过其他测试后才查看电子邮件内容,这使得系统的资源消耗大大减少。您不会得到相同的加权组合,但如果设置得当,您可以获得一个非常好的垃圾邮件系统,它使用更少的 CPU 和 RAM。此外,dovecot 插件是通过在文件夹之间移动邮件来触发的,这比使用单独的文件夹进行训练要好得多。