基于Postfix+Courier-IMAP+SpamAssassin+Amavis的虚拟用户邮件服务器配置求助:自动创建垃圾邮件文件夹并自动分拣垃圾邮件
嘿,这两个需求都是可以通过现有组件的配置来实现的,我来一步步给你讲清楚怎么做:
一、自动为新虚拟用户创建Spam/Junk文件夹
因为你用的是Courier-IMAP,它自带的maildirmake工具可以直接创建符合Maildir格式的文件夹。你只需要在创建新用户的脚本里,添加创建垃圾邮件文件夹的命令就行——毕竟你现在已经有脚本自动生成inbox、drafts这些目录了,加一行命令很方便。
假设你创建用户目录的脚本是这样的:
# 创建用户主目录 mkdir -p /home/vmail/username # 设置正确的权限(vmail用户/组是你的邮件系统用户对吧?) chown vmail:vmail /home/vmail/username
那就在后面加上这两行,来创建Spam文件夹:
# 创建.Spam文件夹(Courier用点开头的目录作为IMAP的隐藏文件夹,客户端能识别) maildirmake /home/vmail/username/.Spam # 确保权限正确 chown -R vmail:vmail /home/vmail/username/.Spam
如果你希望用户第一次登录IMAP客户端时自动创建并订阅这个文件夹,也可以修改Courier-IMAP的配置文件/etc/courier/imapd.conf,添加或修改这两行:
AUTO_CREATE=Spam AUTO_SUBSCRIBE=Spam
不过这个方法是用户登录时才创建,如果你需要用户刚创建就有文件夹,还是用脚本里加maildirmake的方式更稳妥。
二、自动将SpamAssassin标记的邮件移动到Spam文件夹
这里我们可以用Courier的maildrop投递工具来实现规则过滤,步骤如下:
首先确保你的SpamAssassin已经正确标记垃圾邮件:它会在邮件头添加
X-Spam-Flag: YES这个字段,你可以先测试一封垃圾邮件,查看邮件头确认这个标记存在。修改Postfix的
main.cf配置,把虚拟用户的投递方式改成maildrop:
# 找到virtual_transport这一行,改成maildrop virtual_transport = maildrop # 添加maildrop的配置 maildrop_destination_recipient_limit = 1
- 创建全局的maildrop规则文件
/etc/maildroprc,内容如下:
# 定义用户的邮件目录 MAILDIR=$HOME # 检查邮件头是否有SpamAssassin的垃圾标记 if (/^X-Spam-Flag: YES/) { # 如果是垃圾邮件,投递到.Spam文件夹 to "$HOME/.Spam" } else { # 正常邮件投递到收件箱 to "$HOME" }
- 最后重启Postfix和Courier-IMAP服务,让配置生效:
systemctl restart postfix systemctl restart courier-imap
另外,如果你习惯用Procmail来做过滤,也可以类似配置:把Postfix的virtual_transport改成procmail,然后在/etc/procmailrc里添加规则:
MAILDIR=$HOME DEFAULT=$MAILDIR/ LOGFILE=/var/log/procmail.log # 匹配SpamAssassin的标记,移动到Spam文件夹 :0 * ^X-Spam-Flag: YES .Spam/
需要注意的是,不管用哪种方法,都要确保vmail用户对/home/vmail下的所有用户目录有读写权限,否则无法正常投递邮件。
备注:内容来源于stack exchange,提问作者Mailserveradmin

