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

如何在不使用Procmail的情况下配置Postfix将邮件以Maildir格式投递到/var/spool/mail/$USER目录

如何在不使用Procmail的情况下配置Postfix将邮件以Maildir格式投递到/var/spool/mail/$USER目录

我太懂这种找了半天解决方案却一无所获的抓狂感了,别慌,不需要Procmail也能完美实现你的需求,咱们一步步来搞定:

核心思路

要让Postfix把Maildir格式的邮件投递到/var/spool/mail/$USER目录,关键是直接指定投递路径,同时明确告诉Postfix使用Maildir格式,避开默认的mbox模式冲突。

具体操作步骤

  1. 提前准备用户目录并设置正确权限
    首先要确保每个用户对应的父目录存在,并且权限允许Postfix写入、用户自己能访问:

    # 以用户regine为例,替换成实际用户名
    mkdir -p /var/spool/mail/regine
    chown regine:mail /var/spool/mail/regine
    chmod 700 /var/spool/mail/regine
    

    如果你有很多用户,可以写个小脚本批量处理,避免手动重复操作。

  2. 修改Postfix主配置文件
    打开Postfix的主配置文件(通常是/etc/postfix/main.cf),做以下调整:

    • 先注释或者删除你当前设置的home_mailbox = ./
    • 添加或修改以下两个配置项:
      mailbox_path = /var/spool/mail/%u/Maildir/
      mailbox_command =
      
      • %u是Postfix的内置变量,会自动替换成收件人的用户名,确保每个用户都有独立的Maildir目录
      • 路径末尾的/是关键!它会告诉Postfix这是Maildir格式的投递目录,Postfix会自动帮你创建cur、new、tmp这三个子目录
      • mailbox_command =是清空这个配置,避免Postfix调用其他投递工具(比如Procmail),完全用自身的投递逻辑
  3. 重新加载Postfix配置
    修改完配置后,让Postfix生效:

    postfix reload
    

为什么之前的配置会出错?

你之前遇到的报错cannot update mailbox /var/spool/mail/regine for user regine. cannot open file: Is a directory,是因为mail_spool_directory默认是针对mbox格式的——Postfix会尝试在这个目录下创建一个和用户名同名的mbox文件,但你已经提前创建了同名的目录,自然就冲突报错了。

而home_mailbox = ./会让Postfix把Maildir创建在用户的家目录下,这就是为什么你之前看到邮件都跑到/home/regine/{cur,new,tmp}里的原因。

验证效果

可以发一封测试邮件给目标用户,比如:

echo "测试内容" | mail -s "Postfix Maildir测试" regine

然后检查/var/spool/mail/regine/目录下是否出现了cur、new、tmp三个子目录,并且测试邮件在new目录里,就说明配置成功了!

备注:内容来源于stack exchange,提问作者Chris972

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:32:59