Exim+SA 的 LDA

Exim+SA 的 LDA

我有一个运行 Exim 和 Dovecot 的邮件服务器,由 MySQL 支持,供虚拟用户使用。Spamassassin 已配置,似乎运行正常,但未配置将标记的垃圾邮件发送到收件人的“垃圾邮件”目录。我们使用 maildir 格式进行存储。

我该如何处理邮件投递到哪里?我原本以为 procmail 可以做到这一点,但我没有看到针对此特定设置的任何合适配置。

简而言之: - Exim - Spamassassin - 虚拟用户,每个用户的根目录 = /home/mail/$domain/$local_part - 例如,想要将垃圾邮件发送到 /home/mail/$domain/$local_part/spam/

短暂性脑缺血发作

答案1

这是可以正常工作的东西。我以标准的“本地交付”路由器/传输为基础,但在 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 命令。您可能需要稍微调整规则,尤其是关于用户和组设置等。

如果上面的例子中缺少了什么,我注意到有一个类似的例子记录下来这里

答案2

您可以使用几个路由器轻松完成此操作。或者,您可以使用 exim 筛选文件来执行此操作。

我的 ~/.forward 中有以下内容,但您可以轻松地对全局过滤文件使用类似的内容。

if $spam_score_int is not "" then
   if $spam_score_int is above 49 then save $home/Maildir/.SPAM/ finish endif
endif

使用您的路径应该可以工作。只需在示例中替换它,并不要忘记尾部的斜杠,否则您最终可能会交付为 mbox 格式。

答案3

我想出了以下步骤,将垃圾邮件发送到每个域中名为“垃圾邮件”的邮件目录。

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}} }"

我猜我最初发布这个问题时想得太多了。上面的方法似乎很有效。不过我会接受 Daniel 的回答。

相关内容