
从零起步,打造属于你的企业级邮件系统
很多人觉得搭建邮件系统是一件“高难度工程”——命令多、配置杂、动不动就报错。
但其实,只要理清思路、掌握正确顺序,你也能在短短几个小时内,亲手构建出一个稳定、安全、功能完备的企业级邮件系统。
在今天这篇文章中,我们将一起在 Rocky Linux 9.6 上完成从零到上线的全过程部署:
-
Postfix:负责邮件发送与中继,是整个系统的传输核心;
-
Dovecot:提供用户认证与收件服务,确保访问安全稳定;
-
Roundcube:带来简洁直观的 WebMail 界面,让邮件管理更高效。
你将学会如何一步步完成系统初始化、数据库创建、证书配置、服务集成以及前端访问,
最终让自己的邮件系统真正跑起来、发得出去、收得回来。
为什么选择自建邮件系统
在 SaaS 服务盛行的今天,为什么还要自己搭邮件系统?
答案很简单:掌控、安全与可定制性。
-
更高的自主可控性:所有数据都掌握在自己手中,不依赖外部平台。
-
更高的安全性:可自定义防护策略,灵活应对钓鱼与垃圾邮件威胁。
-
更低的长期成本:一次部署,长期使用,不再受限于订阅费用或账户数量。
-
更灵活的扩展性:能与 LDAP、Zabbix、ELK、监控告警系统深度集成。
对于中小企业、教育机构、开发团队而言,自建邮件系统不仅是节省成本的方式,
更是打造企业级 IT 能力与信创合规体系的重要一步。
在部署邮件系统之前,先要为服务器打好基础。下面的步骤会依次完成主机名设置、系统更新、PHP 环境启用以及安全策略调整。
每一步都为后续 Postfix、Roundcube 等组件的稳定运行奠定了环境基础。
基础环境配置
首先,设置服务器主机名为 mail.pangshare.com,并让变更立即生效。
主机名会在邮件系统、TLS 证书以及 DNS 配置中被频繁使用,因此在一开始就要确定。
hostnamectl set-hostname mail.pangshare.com && bash
更新系统软件包并启用 EPEL 源。
EPEL 是一个官方维护的扩展仓库,包含了许多企业部署常用的软件包。生成缓存后,后续的安装过程会更顺畅。
dnf update -y
dnf install epel-release -y
dnf makecache
安装构建邮件系统所需的基础组件。
其中 postfix 是核心的邮件传输服务,postfix-mysql 用于数据库集成,httpd 提供 WebMail 所需的 Web 服务。
同时安装一些管理和辅助工具,方便后续配置。
sudo dnf install wget postfix postfix-mysql httpd vim policycoreutils-python-utils -y
接着,为系统添加 Remi 仓库。
默认仓库中的 PHP 版本通常较旧,而 Remi 提供了最新的 PHP 模块,这对于运行现代 WebMail 系统非常关键。
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
查看当前 PHP 模块状态,重置默认版本后启用 Remi 提供的 PHP 8.2。
这样能确保所有 PHP 组件版本一致,避免出现兼容性问题。
dnf module list php
dnf module -y reset php
dnf module enable php:remi-8.2 -y
安装所需的 PHP 组件。
这些扩展模块涵盖数据库访问、图像处理、国际化、多字节字符支持等功能,是 Roundcube、phpMyAdmin 等程序正常运行的基础。
sudo dnf install php-{pear,cgi,common,curl,gmp,fpm,mbstring,gd,mysqli,gettext,bcmath,json,xml,fpm,intl,zip} -y
验证 PHP 是否安装成功,并确认版本是否为 8.2。
php --version
启动 PHP-FPM 服务,并设置为开机自启。
PHP-FPM 负责处理来自 Web 服务器的动态请求,是 WebMail 运行的关键组件。
systemctl enable --now php-fpm
关闭 SELinux,以避免权限策略阻止邮件或 Web 服务的访问。
在生产环境中建议根据安全策略进行更精细的配置,但在测试或内部环境中,可以选择临时禁用。
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
重启系统,让主机名与 SELinux 的修改正式生效。
这一步完成后,整个基础环境就已经准备就绪。
sudo reboot
部署证书
将证书放在 /etc/postfix/ssl 路径下
sudo mkdir /etc/postfix/ssl
sudo chmod -R 775 /etc/postfix/ssl
MariaDB 数据库安装与邮件系统结构创建
邮件系统除了需要 Postfix 提供邮件传输功能,还需要数据库来存储域名、邮箱账户和别名信息。
MariaDB 是 MySQL 的一个开源分支,性能稳定、兼容性强,非常适合作为 Postfix 的后端数据库。
安装 MariaDB 服务器端与客户端组件。mariadb-server 提供数据库服务,mariadb 是命令行工具包,用于管理和连接数据库。
dnf install -y mariadb-server mariadb
启动 MariaDB 服务并设置为开机自动运行。
这可以确保系统重启后数据库自动恢复运行状态。
systemctl enable --now mariadb
运行数据库安全初始化脚本。
该脚本会引导你设置 root 密码、删除匿名用户、禁止远程 root 登录、移除测试数据库,并刷新权限表。
建议所有生产环境都执行这一流程,确保数据库安全。
mysql_secure_installation
在执行过程中,建议选择以下配置:
- 切换为
unix_socket认证:Y - 修改 root 密码:Y
- 删除匿名用户:Y
- 禁止 root 远程登录:Y
- 删除测试数据库:Y
- 重新加载权限表:Y
完成后,MariaDB 环境将处于安全可用状态。
登录数据库并为 Postfix 创建独立数据库与用户。
Postfix 将通过该数据库存储域、账户和别名的配置信息。
mysql -u root -p
创建数据库 postfix_accounts 并授权访问权限给专用管理账户。
使用独立账号而非 root,有助于控制权限边界。
create database postfix_accounts;
grant all on postfix_accounts.* to postfix_admin@localhost identified by 'StrongPassw0rd';
flush privileges;
创建邮件系统所需的三张核心数据表:
- domains_table:存储邮件域名;
- accounts_table:存储用户邮箱及加密密码;
- alias_table:存储邮件别名映射。
CREATE TABLE `postfix_accounts`.`domains_table` (
`DomainId` INT NOT NULL AUTO_INCREMENT ,
`DomainName` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`DomainId`)
) ENGINE = InnoDB;
CREATE TABLE `postfix_accounts`.`accounts_table` (
`AccountId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`password` VARCHAR(300) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`AccountId`),
UNIQUE KEY `Email` (`Email`),
FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
CREATE TABLE `postfix_accounts`.`alias_table` (
`AliasId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`Source` varchar(100) NOT NULL,
`Destination` varchar(100) NOT NULL,
PRIMARY KEY (`AliasId`),
FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
插入初始数据,用于测试和验证数据库连接。
这里包含一个域名 pangshare.com,两个邮箱账号,以及一个别名转发规则。
INSERT INTO `postfix_accounts`.`domains_table` (DomainName) VALUES ('pangshare.com');
INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email)
VALUES (1, ENCRYPT('Password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'tech@pangshare.com');
INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email)
VALUES (1, ENCRYPT('Password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'klinsmann@pangshare.com');
INSERT INTO `postfix_accounts`.`alias_table` (DomainId, Source, Destination)
VALUES (1, 'talktous@pangshare.com', 'sales@pangshare.com');
为 Roundcube WebMail 创建单独的数据库和账户,用于存储用户偏好与会话数据。
与 Postfix 数据库分离,可以增强系统安全性与可维护性。
create database roundcube;
grant all on roundcube.* to roundcube_admin@localhost identified by 'StrongPassw0rd';
flush privileges;
quit;
Postfix 主配置文件与数据库集成设置
在完成数据库配置后,需要让 Postfix 识别数据库结构,并调整其核心配置文件 main.cf 和 master.cf,以支持虚拟域、虚拟邮箱及安全传输机制。以下步骤将依次完成备份、配置与权限调整。
首先,对原有的 master.cf 文件进行备份,防止修改出错时无法恢复。
mv /etc/postfix/master.cf /etc/postfix/master.cf-$(date +%F)
然后,编辑新的 master.cf 文件,定义邮件服务进程。smtp 与 submission 是最核心的两个服务:前者用于邮件服务器之间通信,后者用于客户端(Outlook、Thunderbird 等)通过加密方式提交邮件。
vim /etc/postfix/master.cf
以下为推荐配置内容:
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
-o syslog_name=postfix/$service_name
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
postlog unix-dgram n - n - 1 postlogd
接着,备份原有的主配置文件 main.cf
mv /etc/postfix/main.cf /etc/postfix/main.cf-$(date +%F)
创建新的 main.cf 文件,配置 Postfix 的主机信息、TLS 加密策略、SASL 认证以及数据库映射路径。
这些设置确保系统能正确处理虚拟域、支持加密登录并与 Dovecot 协同投递。
vim /etc/postfix/main.cf
推荐配置内容如下:
compatibility_level = 2
myhostname = mail.pangshare.com
mydomain = pangshare.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = localhost
mynetworks = 127.0.0.0/8, [::1]/128
unknown_local_recipient_reject_code = 550
append_dot_mydomain = no
biff = no
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
message_size_limit = 10485760
smtpd_tls_cert_file = /etc/postfix/ssl/mail.pangshare.com_public.crt
smtpd_tls_key_file = /etc/postfix/ssl/mail.pangshare.com.key
smtpd_tls_CAfile = /etc/postfix/ssl/mail.pangshare.com_chain.crt
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtp_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_eecdh_grade = strong
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_helo_required = yes
smtpd_delay_reject = yes
disable_vrfy_command = yes
smtpd_client_connection_count_limit = 20
smtpd_client_connection_rate_limit = 30
anvil_rate_time_unit = 60s
smtpd_client_restrictions =
permit_mynetworks,
reject_unknown_client_hostname
smtpd_helo_restrictions =
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname
smtpd_sender_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org,
reject_rhsbl_sender dbl.spamhaus.org
virtual_transport = lmtp:unix:private/dovecot-lmtp
lmtp_destination_recipient_limit = 1
virtual_mailbox_domains = mysql:/etc/postfix/database-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/database-users.cf
virtual_alias_maps = mysql:/etc/postfix/database-alias.cf
dovecot_destination_recipient_limit = 1
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
setgid_group = postdrop
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix/samples
readme_directory = /usr/share/doc/postfix/README_FILES
接下来,为 Postfix 创建数据库映射文件,让它能够查询 MariaDB 中的域、用户和别名信息。
vim /etc/postfix/database-domains.cf
user = postfix_admin
password = StrongPassw0rd
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM domains_table WHERE DomainName='%s'
vim /etc/postfix/database-users.cf
user = postfix_admin
password = StrongPassw0rd
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM accounts_table WHERE Email='%s'
vim /etc/postfix/database-alias.cf
user = postfix_admin
password = StrongPassw0rd
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT Destination FROM alias_table WHERE Source='%s'
为防止敏感信息泄露,限制配置文件的读取权限,并将所属组设置为 postfix。
sudo chmod 640 /etc/postfix/database-domains.cf
sudo chmod 640 /etc/postfix/database-users.cf
sudo chmod 640 /etc/postfix/database-alias.cf
sudo chown root:postfix /etc/postfix/database-domains.cf
sudo chown root:postfix /etc/postfix/database-users.cf
sudo chown root:postfix /etc/postfix/database-alias.cf
最后,重启 Postfix 服务,让新配置生效。
systemctl restart postfix
验证 Postfix 与数据库的连接
完成 main.cf 和数据库映射文件配置后,需要验证 Postfix 是否能正确查询 MariaDB 数据。postmap -q 命令用于直接测试 Postfix 的查询结果。
查询域名表,确认 Postfix 是否能识别邮件域 pangshare.com。
若输出结果为 1,说明数据库映射正常。
sudo postmap -q pangshare.com mysql:/etc/postfix/database-domains.cf
验证邮箱账户是否存在。
查询 tech@pangshare.com 与 klinsmann@pangshare.com 两个账户,若返回 1,说明 Postfix 能成功通过数据库验证该用户。
sudo postmap -q tech@pangshare.com mysql:/etc/postfix/database-users.cf
sudo postmap -q klinsmann@pangshare.com mysql:/etc/postfix/database-users.cf
最后验证别名映射是否生效。
输入 talktous@pangshare.com,若返回目标地址(例如 sales@pangshare.com),说明别名转发配置正确。
sudo postmap -q talktous@pangshare.com mysql:/etc/postfix/database-alias.cf
如果以上四个查询结果都能正确返回相应值,就表示:
- Postfix 成功与 MariaDB 建立连接;
- 域、用户与别名三张表的映射关系配置正确;
- 邮件系统已经可以进入收发邮件联调阶段。
Dovecot 安装与配置
完成 Postfix 配置后,接下来需要部署 Dovecot,它负责提供 IMAP/POP3 收件服务以及用户身份验证。
在企业邮件系统中,Dovecot 通常作为 Postfix 的后端收件与认证组件,两者配合后即可实现完整的邮件收发流程。
安装 Dovecot 及其 MySQL 支持模块。dovecot-mysql 用于连接数据库,从中读取虚拟用户与密码信息。
dnf install dovecot dovecot-mysql -y
创建独立的邮件存储用户与用户组,用于存放虚拟邮箱数据。
这里 UID/GID 固定为 6000,目录 /home/vmail 将作为所有虚拟邮箱的主目录。
sudo groupadd -g 6000 vmail
sudo useradd -g vmail -u 6000 vmail -d /home/vmail -m
备份默认配置文件,然后创建新的 Dovecot 主配置文件。
在 dovecot.conf 中启用必要的协议(IMAP、POP3、LMTP),并指定日志文件位置。
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-$(date +%F)
vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *, ::
dict {
}
!include conf.d/*.conf
!include_try local.conf
log_path = /var/log/dovecot.log
创建日志文件并设置合适的权限:
sudo touch /var/log/dovecot.log
sudo chmod 775 /var/log/dovecot.log
备份认证配置文件 10-auth.conf,并修改认证机制。
mv /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf-$(date +%F)
sudo vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext
备份数据库认证文件模板,并新建自定义配置。
mv /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext-$(date +%F)
vim /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}
创建虚拟邮箱目录:
mkdir /home/vmail/pangshare.com
配置数据库连接文件 dovecot-sql.conf.ext,使 Dovecot 能正确从 MariaDB 查询账户密码。
注意 default_pass_scheme 与 Postfix 数据库保持一致。
vim /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = "host=127.0.0.1 dbname=postfix_accounts user=postfix_admin password=StrongPassw0rd"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM accounts_table WHERE Email='%u';
调整邮件目录结构配置文件 10-mail.conf,定义邮件存储路径和访问权限。
mv /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf-$(date +%F)
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mail_access_groups = vmail
first_valid_uid = 6000
protocol !indexer-worker {
}
mbox_write_locks = fcntl
修改主服务配置 10-master.conf,定义 Dovecot 各服务的监听端口与与 Postfix 的接口连接方式。
关键点在于 lmtp 与 auth 段的 unix_listener 设置,这使 Postfix 能通过本地 socket 与 Dovecot 通信。
mv /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf-$(date +%F)
vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0666
user = postfix
group = postfix
}
}
service auth {
unix_listener auth-userdb {
mode = 0666
user = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
user = dovecot
}
service auth-worker {
user = vmail
}
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
设置目录与配置文件权限,确保安全性与可访问性。
sudo chown -R vmail:vmail /home/vmail
chmod -R 775 /home/vmail
sudo chown -R vmail:dovecot /etc/dovecot
sudo chmod -R o-rwx /etc/dovecot
最后配置 SSL 加密,确保 IMAPS/POP3S 使用与 Postfix 相同的证书,实现统一的加密信任链。
mv /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf-$(date +%F)
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/postfix/ssl/mail.pangshare.com_public.crt
ssl_key = </etc/postfix/ssl/mail.pangshare.com.key
ssl_cipher_list = PROFILE=SYSTEM
重启 Dovecot 服务,使所有配置立即生效。
systemctl restart dovecot
Roundcube WebMail 安装与配置
在完成 Postfix 与 Dovecot 的后端服务部署后,最后一步是安装 WebMail 前端。
Roundcube 提供基于网页的邮件访问界面,用户可以直接通过浏览器登录邮箱进行收发邮件。以下步骤将完成 Roundcube 的下载安装、部署与数据库连接配置。
首先,从 GitHub 获取 Roundcube 的最新版本号,并下载完整安装包。
这条命令会自动解析最新的发布版本号,从而确保始终安装最新版。
VER="$(curl -s https://api.github.com/repos/roundcube/roundcubemail/releases/latest|grep tag_name|cut -d '"' -f 4|sed 's/v//')"
wget https://github.com/roundcube/roundcubemail/releases/download/$VER/roundcubemail-$VER-complete.tar.gz
安装解压工具并解压 Roundcube 安装包。
解压后重命名目录,方便后续管理。
sudo dnf install tar -y
tar xvzf roundcubemail-$VER-complete.tar.gz
mv roundcubemail-$VER roundcube
将 Roundcube 目录移动至 Apache 网站根目录 /var/www/html/,并修改权限。
确保 Apache 用户 apache 对文件拥有读写权限,否则无法加载配置文件或写入 session。
sudo mv roundcube /var/www/html/
sudo chown -R apache:apache /var/www/html/
安装 mod_ssl 模块,为 Apache 启用 HTTPS 支持。
Roundcube 在登录和发送邮件时会经过密码认证,建议始终使用加密访问。
sudo dnf install mod_ssl -y
sudo systemctl restart httpd
修改 Roundcube 配置文件权限
sudo chown apache:apache /var/www/html/roundcube/config/config.inc.php
现在可以通过浏览器访问并进行配置:
http://mail.contoso.intra/roundcube/installer
点击页面最下方 NEXT
根据我们之前的配置信息,调整数据库连接信息后点击页面最下方CREATE CONFIG
点击 CONTINUE 继续
点击Initialize database 对数据库进行初始化
编辑新的配置文件,定义数据库连接、IMAP/SMTP 服务器、加密密钥及插件。
mv /var/www/html/roundcube/config/config.inc.php /var/www/html/roundcube/config/config.inc.php-$(date +%F)
sudo vim /var/www/html/roundcube/config/config.inc.php
<?php
$config['db_dsnw'] = 'mysql://roundcube_admin:StrongPassw0rd@localhost/roundcube';
$config['imap_host'] = 'localhost:143';
$config['support_url'] = '';
$config['des_key'] = '4ehsXx6mPAWo0Emkf4noFX69';
$config['plugins'] = [];
$config['smtp_host'] = 'tls://mail.pangshare.com';
$config['support_url'] = '';
$config['default_port'] = 993;
$config['smtp_port'] = 587;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['smtp_auth_type'] = 'LOGIN';
$config['smtp_debug'] = true;
$config['auto_create_user'] = true;
$config['plugins'] = array('virtuser_query');
$config['virtuser_query'] = "SELECT Email FROM postfix_accounts.accounts_table WHERE Email = '%u'";
在页面上进行发送邮件测试
现在可以通过浏览器访问:
https://mail.pangshare.com/roundcube
输入在数据库中创建的邮箱账户(例如 tech@pangshare.com 或 klinsmann@pangshare.com)进行登录。

如果页面能正常加载并成功登录,即表明 Roundcube 与 Postfix、Dovecot、MariaDB 三者已经正确联通。

此时,一个完整的企业级邮件系统已经正式运行:
- Postfix 负责邮件投递与中继
- Dovecot 提供收件与认证服务
- MariaDB 存储用户与域信息
- Roundcube 提供 WebMail 用户界面
邮件系统部署到这里就圆满完成啦!
到这里,一个完整的企业级邮件系统就正式上线了!🎉
从 Postfix 的邮件传输,到 Dovecot 的认证服务,再到 Roundcube 的 WebMail 界面——
每一个组件都在协同运作,让整个系统既稳定又高效。
如果你在搭建过程中遇到了任何问题,比如数据库连接失败、TLS 证书加载异常、WebMail 登录报错等,欢迎在评论区留言,我们会一起分析、一起解决。也欢迎你把部署成功的截图、遇到的坑或优化经验分享出来,让更多同行少走弯路。
技术交流
如果你在搭建或调试过程中遇到问题,或者想进一步交流邮件系统的优化与企业级应用场景,欢迎加入我们的技术交流群。群内有多位长期从事 Linux、Postfix、Dovecot、Zabbix 等方向的技术专家,一起探讨配置思路、分享实战经验、解答疑难问题。
扫码加入交流群,让你的技术之路不再孤单。

<center><u>🌟 感谢阅读!喜欢就点个赞吧~</u></center>
📌 三步支持我,让更多朋友看到优质内容:
1.👍 点赞 – 喜欢的话别忘了右下角点个赞~
2.⭐ 关注 – 点击顶部蓝字,订阅不迷路
3.🔄 转发 – 分享到朋友圈,知识需要传递
(关注后右上角设为星标✨,更新第一时间看)

此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/4266.htm
微信扫一扫