我正在使用dspam进行垃圾邮件过滤,在Ubuntu 9.10下运行“dspamd”守护进程,然后设置一个Postfix规则:
smtpd_recipient_restrictions = ... check_client_access pcre:/etc/postfix/dspam_everything ...
那个PCRE地图看起来像这样:
/./ FILTER lmtp:[127.0.0.1]:11124
这很好,意味着我系统上的所有用户都可以得到他们的所有电子邮件,无论“dspam”是否认为它是无辜的,并且可以select对其决策进行过滤或忽略它们。
问题出现在我想用我的电子邮件存档来培训dspam的时候。 阅读了关于“dspam”命令后,我对我的收件箱和垃圾邮件箱中的文件(从我使用其他过滤解决scheme的date)的文件中尝试了这一点:
for file in Mail/Inbox/*; do cat $file | dspam --class=innocent --source=corpus; done for file in Mail/spam/*; do cat $file | dspam --class=spam --source=corpus; done
做完所有这些之后我注意到的症状是dspam在分类垃圾邮件方面非常糟糕 – 它找不到任何东西! 当我追踪到这个问题的时候,我正在用上面的命令训练用户“brandon”,但是传入的电子邮件却被用来与用户名“brandon @ mydomain”进行比较,所以它是在一个完全空的训练数据库!
那么,我能做些什么才能使上述命令实际上训练我的完全合格的电子邮件地址,而不是我纯粹的用户名? 我想避免不得不以“–user”选项作为root运行“dspam”。 我会期望“dspam”configuration文件将有一个“append_domain”属性或用来装饰本地用户名与适当的电子邮件域的东西,但我找不到任何这样的事情。
当我将Berkeley DB后端用于“dspam”时,我通过创build从其中一个数据库到另一个数据库的符号链接来解决此问题。 :-)但是这个解决scheme最终因为BDB后端不是线程安全的而死掉了,所以现在我已经转到了PostgreSQL的后端,并且需要一种方法来解决那里的问题。 而且,不,保留用户名的表有一个UNIQUE约束,这使得我不能把两个用户名列为映射到相同的ID。 🙂
简单的解决办法是build立一个共同的接种组
我说:布兰登,布兰登@ mydomain.com
/ var / spool / dspam / group – 在debian安装
我相信默认是在debian中启用接种组/共享组,在这种情况下,您只需要在用户目录中创build组文件,它将自动使用。