You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Postfix+Courier-IMAP+SpamAssassin+Amavis的虚拟用户邮件服务器配置求助:自动创建垃圾邮件文件夹并自动分拣垃圾邮件

基于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投递工具来实现规则过滤,步骤如下:

  1. 首先确保你的SpamAssassin已经正确标记垃圾邮件:它会在邮件头添加X-Spam-Flag: YES这个字段,你可以先测试一封垃圾邮件,查看邮件头确认这个标记存在。

  2. 修改Postfix的main.cf配置,把虚拟用户的投递方式改成maildrop:

# 找到virtual_transport这一行,改成maildrop
virtual_transport = maildrop
# 添加maildrop的配置
maildrop_destination_recipient_limit = 1
  1. 创建全局的maildrop规则文件/etc/maildroprc,内容如下:
# 定义用户的邮件目录
MAILDIR=$HOME
# 检查邮件头是否有SpamAssassin的垃圾标记
if (/^X-Spam-Flag: YES/)
{
    # 如果是垃圾邮件,投递到.Spam文件夹
    to "$HOME/.Spam"
}
else
{
    # 正常邮件投递到收件箱
    to "$HOME"
}
  1. 最后重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 08:33:02