我有一个运行Exim和Dovecot的邮件服务器,MySQL支持虚拟用户。 Spamassassinconfiguration好像似乎工作正常,但发送标记的垃圾邮件到收件人的“垃圾邮件”目录没有configuration。 我们正在使用maildir格式进行存储。
我将如何处理电子邮件的处理? 我会认为procmail可以做到这一点,但我没有看到这个特定的设置任何像样的configuration。
简而言之: – Exim – Spamassassin – 虚拟用户,每个用户的根目录= / home / mail / $ domain / $ local_part – 希望将垃圾邮件发送到/ home / mail / $ domain / $ local_part / spam /
TIA
这是应该工作的东西。 我已经把它从标准的“本地交付”路由器/传输,但添加在X-Spam-Flag头的条件,我在相关的ACL中设置。 如果你不知道如何做,请告诉我,我会修改答案。
我做了类似的事情,但是在域名级别上,我的设置可能对您不太有用。
首先,你需要一个路由器。 路由器是按顺序处理的,所以把它放在合适的地方 – 通常在你捕获正常的邮件之前,因为这将优先。
spamcheck: debug_print = "R: spamcheck for $local_part@$domain" driver = accept check_local_user user = mail condition = "${if def:h_X-Spam-Flag: {yes}{no}}" transport = local_spam_delivery
现在你需要一个local_spam_delivery传输,所以放在你的传输部分的任何地方:
local_spam_delivery: debug_print = "T: local_spam_delivery for $local_part@$domain" driver = appendfile directory = /home/mail/$domain/$local_part/spam/ maildir_format delivery_date_add envelope_to_add return_path_add
如果您不想将它作为maildir,请删除maildir_format命令。 您可能需要调整一些规则,特别是关于用户和组设置等。
如果在上面的例子中缺less一些东西,我注意到这里有一个类似的例子
你可以用几个路由器轻松做到这一点。 或者,您可以使用一个eximfilter文件来做到这一点。
我在〜/ .forward中有以下内容,但可以轻松地为您的全局filter文件使用类似的东西。
if $spam_score_int is not "" then if $spam_score_int is above 49 then save $home/Maildir/.SPAM/ finish endif endif
使用你的path应该工作。 只要在示例中replacereplace它,不要忘记尾部的斜线,或者您可能会最终提供到mbox格式。
我想出了以下内容,将垃圾邮件发送给每个域名为“Junk”的maildir。
mysql_delivery: driver = appendfile maildir_format directory = "${if and { {def:h_X-Spam-Flag:} {eq {$h_X-Spam-Flag}{YES}}} {/home/mail/${domain}/${local_part}/.Junk}{/home/mail/${domain}/${local_part}} }"
当我最初发布这个问题的时候,我想这个想法太难了。 以上似乎工作得很好。 虽然我会接受但以理的回答。