目前我使用 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