使用 Exim 和 Dovecot 进行用户可训练的垃圾邮件过滤

使用 Exim 和 Dovecot 进行用户可训练的垃圾邮件过滤

目前我使用 Exim 将邮件发送dovecot-lda到 Dovecot 邮箱。我想添加垃圾邮件过滤功能,但我不想在 Exim 中拒绝误报,我想从客户端训练贝叶斯过滤器。

那么:我该如何配置 spamd,使得垃圾邮件落入Junk文件夹中,并且当用户在他们的 中找到垃圾邮件Inbox或在他们的 中找到非垃圾邮件时Junk,他们将其移动到训练 spamd 的正确框中。

我已经发现dovecot-反垃圾邮件但我不确定它的质量,它似乎只支持 dspam(和 crm114,已失效,上次发布是在 2009 年 8 月)。

答案1

您无需对 spamd 做任何特殊操作。我对 Exim 的 MDA 不是很熟悉,所以希望有人能写一个针对它的答案。当您的邮件投递代理运行时,它应该会发送电子邮件spamc -u $USERNAME(根据需要修改变量)。然后查看标题。如果存在“X-Spame-Status: Yes”,则将邮件投递到用户 Maildir 的子文件夹中。

我将其用于maildrop我的 MDA。配置(在 中/usr/local/etc/maildroprc)为:

if ($LOGNAME ne "")
{
        xfilter "spamc -u $LOGNAME"
} else {
        xfilter "spamc -u $USER"
}

if ( /^X-Spam-Status: Yes/ )
{
        `test -d $DEFAULT/.Junk`
        if( $RETURNCODE == 1 )
        {
                `maildirmake -f Junk $DEFAULT`
        }
        exception
        {
                to "$DEFAULT/.Junk"
        }
}

至于贝叶斯学习,我编写了一个脚本,cron每20分钟调用一次:

#!/bin/csh
foreach cuser (`ls /home`)
        if ( -d $cuser/Maildir) then
                sa-learn --dbpath /home/$cuser/.spamassassin --spam /home/$cuser/Maildir/.Junk
        endif
end

然后我接着使用下面这行代码来删除超过 2 周的垃圾。你不需要清理它,但大多数人永远不会自己清理:

find /usr/home/*/Maildir/.Junk/*/ -ctime +2w -type f -delete

相关内容