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

如何配置Postfix通过Dovecot LMTP将邮件投递到本地Maildir目录

如何配置Postfix通过Dovecot LMTP将邮件投递到本地Maildir目录

看起来你遇到的问题核心是Postfix自动给本地用户名加上了完整域名,而Dovecot的LMTP服务没把带域名的地址识别成对应的本地系统用户。咱们一步步调整配置,让这俩家伙配合好,把邮件稳稳投递到/var/mail/username的Maildir目录里。

1. 给Postfix“定规矩”:明确本地域名范围

首先编辑Postfix的主配置文件/etc/postfix/main.cf,确保它清楚哪些域名属于本地系统,避免乱加不必要的后缀:

# 定义Postfix视为本地的域名,把你的node12.xxxx.net加进去
mydestination = $myhostname, localhost.$mydomain, localhost, node12.xxxx.net
# 让Postfix优先查询本地系统用户作为收件人
local_recipient_maps = $alias_maps $local_unix_maps
# 留空,防止Postfix转发未知用户的邮件
luser_relay =

2. 让Postfix传递纯用户名给Dovecot

默认Postfix会把本地用户名转成完整邮箱地址再传给Dovecot,咱们可以直接指定本地投递规则,确保传递的是纯用户名。在/etc/postfix/main.cf里添加或修改:

# 本地投递直接对接Dovecot的LMTP服务
local_transport = lmtp:unix:private/dovecot-lmtp
# 可选:关闭自动给本地用户名追加域名的行为(和下一步Dovecot配置二选一即可)
append_at_myorigin = no

3. 给Dovecot“开绿灯”:自动识别带域名的本地用户

就算Postfix传了完整邮箱地址,咱们也能让Dovecot自动剥离域名,只认前面的用户名。编辑Dovecot的LMTP配置文件/etc/dovecot/conf.d/20-lmtp.conf:

# 从完整邮箱地址里提取纯用户名(比如从username@xxx.net里提取username)
auth_username_format = %n
# 关闭细节邮箱,确保邮件直接放到用户的Maildir根目录
lmtp_save_to_detail_mailbox = no

然后确认Dovecot知道用户的Maildir路径,编辑/etc/dovecot/conf.d/10-mail.conf:

# 指定用户的Maildir目录为/var/mail/用户名
mail_location = maildir:/var/mail/%u
# 确保Dovecot使用系统用户数据库
passdb {
  driver = passwd
}
userdb {
  driver = passwd
}

4. 重启服务+验证效果

配置改完后,重启俩服务让配置生效:

systemctl restart postfix
systemctl restart dovecot

然后测试发邮件:

mail username -s "测试邮件" <<< "这是测试内容"

之后可以去/var/mail/username/new目录下看看有没有新生成的邮件文件,或者查日志/var/log/mail.log,如果看到status=sent就说明成功了!

额外排查小技巧

如果还是有问题,用Dovecot自带的命令测试用户识别:

doveadm user username@node12.xxxx.net

如果命令返回了用户的UID、GID和邮箱路径,说明Dovecot已经能正确识别这个带域名的用户了;如果返回错误,就再检查Dovecot的passdb和userdb配置,确保它在查询系统用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:19:50