从零起步,打造属于你的企业级邮件系统

从零起步,打造属于你的企业级邮件系统

从零起步,打造属于你的企业级邮件系统

很多人觉得搭建邮件系统是一件“高难度工程”——命令多、配置杂、动不动就报错。
但其实,只要理清思路、掌握正确顺序,你也能在短短几个小时内,亲手构建出一个稳定、安全、功能完备的企业级邮件系统。

在今天这篇文章中,我们将一起在 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;

创建邮件系统所需的三张核心数据表:

  1. domains_table:存储邮件域名;
  2. accounts_table:存储用户邮箱及加密密码;
  3. 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.cfmaster.cf,以支持虚拟域、虚拟邮箱及安全传输机制。以下步骤将依次完成备份、配置与权限调整。

首先,对原有的 master.cf 文件进行备份,防止修改出错时无法恢复。

mv /etc/postfix/master.cf /etc/postfix/master.cf-$(date +%F)

然后,编辑新的 master.cf 文件,定义邮件服务进程。
smtpsubmission 是最核心的两个服务:前者用于邮件服务器之间通信,后者用于客户端(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.comklinsmann@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 的接口连接方式。
关键点在于 lmtpauth 段的 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
IMG-20251028120014129

根据我们之前的配置信息,调整数据库连接信息后点击页面最下方CREATE CONFIG
IMG-20251028120110407

点击 CONTINUE 继续
IMG-20251028120251649

点击Initialize database 对数据库进行初始化
IMG-20251028120340234

编辑新的配置文件,定义数据库连接、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'";

在页面上进行发送邮件测试
IMG-20251028121033204

现在可以通过浏览器访问:

https://mail.pangshare.com/roundcube

输入在数据库中创建的邮箱账户(例如 tech@pangshare.comklinsmann@pangshare.com)进行登录。

IMG-20251028121537672

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

IMG-20251028121610221

此时,一个完整的企业级邮件系统已经正式运行:

  • 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

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 4天前
下一篇 2023年11月1日 下午6:37

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注