PostfixAdmin 只是一个记账的账本,真正干活的是 Postfix (MTA)Dovecot (MDA)。本篇的目标是让这两兄弟通过 MySQL 数据库实现“心意相通”:Postfix 负责对外收发,Dovecot 负责对内验证身份和存储邮件。

1. 基础环境准备

1.1 安装软件包

        除了 Postfix,我们还需要安装 Dovecot 及其 MySQL 插件(如果你在上一篇解决报错时没装的话)。

# 卸载旧的 sendmail 以免冲突
yum -y remove sendmail

# 安装 Postfix 和 Dovecot 全家桶
yum -y install postfix postfix-mysql dovecot dovecot-mysql

1.2 创建邮件存储用户 (vmail)

        我们需要一个系统用户来专门管理所有邮件文件。千万不要用 root 运行!

# 创建用户组 vmail (GID 5000) 和用户 vmail (UID 5000)
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

# 以后所有的邮件都会存在这里
ls -ld /home/vmail

2. 配置 SQL 映射文件 (Postfix 读取数据库)

        Postfix 需要知道哪些域名是我们的,哪些用户是存在的。我们需要创建 3 个 SQL 查询文件。建议创建目录 /etc/postfix/sql/

mkdir -p /etc/postfix/sql

1. 域名列表:mysql_virtual_domains_maps.cf

user = postfix
password = 你的数据库密码
hosts = 127.0.0.1
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

2. 用户邮箱列表:mysql_virtual_mailbox_maps.cf

user = postfix
password = 你的数据库密码
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

3. 别名与转发列表:mysql_virtual_alias_maps.cf

user = postfix
password = 你的数据库密码
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

3. 配置 Dovecot (核心难点)

        这是最容易出“内部通信错误”的地方。我们需要配置 Dovecot 开启一个“后门”给 Postfix 用来查密码。

3.1 核心配置 dovecot.conf

        编辑 /etc/dovecot/dovecot.conf,启用必要的协议:

# 启用 imap (给用户看邮件) 和 lmtp (帮 Postfix 存邮件)
protocols = imap lmtp
listen = *

3.2 数据库连接 dovecot-sql.conf.ext

        新建或编辑 /etc/dovecot/dovecot-sql.conf.ext注意:这里的加密方式必须与 PostfixAdmin 里设置的一致!且如果上篇创建数据库时,用户主机填写的localhost,需要创建一个名称与权限相同,但主机为127.0.0.1的用户

driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=你的数据库密码
default_pass_scheme = SHA512-CRYPT

# 验证密码的查询语句
password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active='1'

# 以此获取用户目录 uid=5000 gid=5000 即 vmail 用户
user_query = SELECT concat('/home/vmail/', maildir) AS home, 5000 AS uid, 5000 AS gid, 'dirsize' as quota_rule FROM mailbox WHERE username = '%u' AND active='1'

3.3 认证与通信 10-auth.conf

        编辑 /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

        注意:确保 auth-sql.conf.ext 里引用了上面的 dovecot-sql.conf.ext

3.4 关键:Master Socket 配置 10-master.conf

        编辑 /etc/dovecot/conf.d/10-master.conf这一步是解决 Postfix 无法连接 Dovecot 的关键!

# 1. 这里的 socket 是给 Postfix 用来进行 SASL 认证的
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

# 2. 这里的 lmtp 是给 Postfix 用来投递邮件的
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

3.5 SSL 配置 (复用上一篇)

        确保 /etc/dovecot/conf.d/10-ssl.conf 已指向 acme.sh 的证书:

ssl = required
ssl_cert = </usr/local/apache/conf/ssl/server.crt
ssl_key = </usr/local/apache/conf/ssl/server.key

4. 配置 Postfix (集成 Dovecot)

        最后,修改 Postfix 的主配置 /etc/postfix/main.cf,让它去连接上面配置好的 Dovecot Socket。

# === 基础信息 ===
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost

# === 虚拟域名与用户 (查 SQL) ===
virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

# === 邮件投递 (交给 Dovecot LMTP) ===
virtual_transport = lmtp:unix:private/dovecot-lmtp

# === 身份验证 (SASL - 问 Dovecot) ===
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

# === SSL/TLS 配置 (路径要对) ===
smtpd_tls_cert_file = /usr/local/apache/conf/ssl/server.crt
smtpd_tls_key_file = /usr/local/apache/conf/ssl/server.key
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_protocols = TLSv1.2 TLSv1.3
smtpd_tls_ciphers = high:!aNULL:!MD5:!RC4

5. 重启与验证

# 重启两兄弟
systemctl restart dovecot
systemctl restart postfix

        检查日志:这是最重要的一步。

tail -f /var/log/maillog

        如果看到 Postfix is running with backwards-compatible default settings 是正常的。如果有 connect to private/auth failed,请检查 3.4 步的权限设置。

        至此,你的邮件服务器核心已经搭建完毕!现在你可以配置 Outlook 或 Thunderbird,使用在 PostfixAdmin 里创建的账号进行测试了。