我该如何向 dspam 解释用户“brandon”与“brandon@mydomain”相同

我该如何向 dspam 解释用户“brandon”与“brandon@mydomain”相同

我在用垃圾邮件通过在 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”是否认为它是无辜的,并且可以选择过滤其决定或忽略它们。

当我想使用我的电子邮件档案训练 dspam 时,问题就出现了。在阅读了有关“dspam”命令的信息后,我尝试对我的收件箱和垃圾邮件箱中的文件进行此操作(这些文件来自我使用其他过滤解决方案时的文件):

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”进行比较,因此它在一个完全空的训练数据库中运行!

那么,我该怎么做才能让上述命令真正训练我的完全合格电子邮件地址而不是我的裸用户名?我想避免以 root 身份使用“--user”选项运行“dspam”。我原本以为“dspam”配置文件会有一个“append_domain”属性或类似的东西,可以用适当的电子邮件域来修饰本地用户名,但我找不到任何这样的东西。

当我使用 Berkeley DB 后端进行“dspam”时,我通过创建从一个数据库到另一个数据库的符号链接解决了这个问题。:-) 但该解决方案最终失败了,因为 BDB 后端不是线程安全的,所以现在我已转移到 PostgreSQL 后端,需要一种方法来解决那里的问题。而且,不,它保存用户名的表有一个 UNIQUE 约束,阻止我将两个用户名列为映射到同一个 ID。:-)

答案1

简单的解决方案是建立一个共享接种组

我:布兰登,[电子邮件保护]

/var/spool/dspam/group — 在 Debian 安装中

我相信默认是在 debian 中启用接种组/共享组,在这种情况下您只需要在用户目录中创建组文件,它就会自动使用。

相关内容