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

Postfix能否在同一域名下同时兼容本地用户与SQLite虚拟用户?

Postfix能否在同一域名下同时兼容本地用户与SQLite虚拟用户?

当然可以实现!我之前也碰到过一模一样的需求,折腾了好一阵才摸清楚门道,给你梳理下关键的配置步骤,应该能帮你解决问题:

核心思路

让Postfix优先查询SQLite里的虚拟用户,如果收件人存在就走虚拟邮件投递;如果查不到,就 fallback 到本地用户的投递逻辑。这里的关键是别把目标域名加到virtual_mailbox_domains里(不然Postfix会把整个域名当成纯虚拟域,直接忽略本地用户)。

具体配置步骤

1. 调整Postfix主配置(main.cf)

先把这些关键参数配置好:

# 基础域名配置(替换成你的实际域名)
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain

# 本地用户的maildir设置(和你的需求匹配)
home_mailbox = mail/

# 虚拟用户相关配置
virtual_mailbox_base = /var/vmail
virtual_uid_maps = static:5000  # 替换成你vmail用户的实际UID
virtual_gid_maps = static:5000  # 替换成你vmail用户的实际GID

# 配置SQLite映射:查询虚拟用户是否存在
virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_virtual_users.cf

# 配置transport映射:判断收件人走虚拟还是本地投递
transport_maps = sqlite:/etc/postfix/sqlite_transport.cf

# 本地收件人列表:包含虚拟用户+系统本地用户,避免Postfix退回有效收件人
local_recipient_maps = $virtual_mailbox_maps unix:passwd.byname

2. 编写SQLite映射文件

(1)虚拟用户查询文件 sqlite_virtual_users.cf

这个文件用来验证虚拟用户是否存在:

dbpath = /etc/postfix/vmail.db  # 替换成你的SQLite数据库路径
query = SELECT '1' FROM users WHERE email = '%s'

(这里假设你的用户表叫users,存储邮箱的字段叫email,根据你的实际表结构调整)

(2)投递方式判断文件 sqlite_transport.cf

这个文件用来告诉Postfix,虚拟用户用virtual投递,本地用户用默认的local投递:

dbpath = /etc/postfix/vmail.db
query = SELECT 'virtual' FROM users WHERE email = '%s'

3. 权限与测试

  • 确保/var/vmail目录的权限正确,属于你配置的vmail用户/组,比如:
chown -R vmail:vmail /var/vmail
chmod -R 700 /var/vmail
  • 重启Postfix生效:
systemctl restart postfix
  • 测试查询:验证虚拟用户能否被正确识别
postmap -q "virtual_user@example.com" sqlite:/etc/postfix/sqlite_virtual_users.cf
postmap -q "virtual_user@example.com" sqlite:/etc/postfix/sqlite_transport.cf

如果返回结果正常,就可以发测试邮件验证了:虚拟用户的邮件会到/var/vmail/virtual_user/,本地用户的邮件会到/home/local_user/mail/。

注意事项

  • 千万别把你的域名加到virtual_mailbox_domains里,否则Postfix会完全忽略本地用户!
  • Dovecot你已经配置好了,只要确保它能同时访问本地用户的$HOME/mail/和虚拟用户的/var/vmail/路径就行,这个你应该已经搞定了。

按照这个流程调整,应该就能让两种用户共存了,我当初就是这么解决问题的,祝你顺利!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:34:56