前情提要

在前面的邮件系统基础环境中,已经完成了 Postfix 本地投递、Dovecot IMAPS 收信、Submission 587 发信端口启用等工作。服务层已经具备可用条件,但仍停留在命令行和协议验证阶段。为了让整个系统更适合展示、测试和后续使用,需要再补上一层图形化的 Webmail 界面。

Roundcube 是一个经典的 Web 邮件客户端,它本身并不直接收发邮件,而是作为浏览器端的用户界面,通过 IMAP 连接 Dovecot 读取邮件,通过 SMTP 连接 Postfix 提交邮件。也就是说,Roundcube 的职责不是取代 MTA 或 IMAP 服务,而是把它们整合成一个可直接访问的 Web 入口。

本文的目标很明确:在 Ubuntu 24.04 上完成 Apache、PHP、MariaDB 与 Roundcube 的安装和配置,并通过浏览器打开中文登录界面,最终使用已有本地邮箱账户登录 Webmail。


前置条件说明

开始本文之前,系统应至少满足以下条件:

  • Apache 尚未部署,或允许继续安装 Web 服务组件
  • Dovecot 的 IMAPS 已正常监听 993 端口
  • Postfix 的 Submission 已正常监听 587 端口
  • 本地邮箱用户已经存在,例如 alice、bob
  • 邮件服务器主机名已固定为 mail.ad.yxwa.info

本文默认 Roundcube 的登录方式仍然使用系统本地邮箱账户,也就是前文中创建的 Linux 本地用户。这样可以优先验证 Web 界面与邮件系统的联动,不在本文中引入更复杂的 SMTP SASL 和域用户直接收发逻辑。


安装 Apache、PHP、Roundcube 与 MariaDB

首先安装 Web 服务、PHP 运行环境、Roundcube 核心包以及数据库服务。

执行以下命令:

sudo apt update
sudo apt install -y roundcube roundcube-core roundcube-mysql apache2 php php-mysql php-intl php-xml php-mbstring php-curl php-zip mariadb-server mariadb-client

这一组软件的职责分别如下:

apache2:提供 Web 服务入口

php 及相关扩展:负责运行 Roundcube 的 PHP 代码

mariadb-server:作为 Roundcube 的配置与会话存储数据库

roundcube-core:Roundcube 核心程序

roundcube-mysql:Roundcube 与 MySQL/MariaDB 的数据库支持模块

安装过程中,Roundcube 会调用 dbconfig-common 尝试自动初始化数据库。只要 MariaDB 正常运行,这一步通常可以自动完成。如果安装时没有完全配置成功,也可以在安装完成后单独重新执行一次配置过程。



确认 MariaDB 已正常运行

Roundcube 依赖数据库保存用户设置、会话等数据,因此在继续配置前,需要确认 MariaDB 已经启动。

执行:

sudo systemctl enable --now mariadb
systemctl status mariadb --no-pager
sudo ss -tulpn | grep 3306
sudo mysql -e "SELECT VERSION();"

这里的验证逻辑很直接:

  • systemctl status mariadb 用于查看数据库服务状态
  • ss -tulpn | grep 3306 用于确认数据库端口已经监听
  • sudo mysql -e "SELECT VERSION();" 用于验证本机能够实际连接数据库

如果以上三项全部正常,说明 Roundcube 的数据库运行环境已经具备。

重新配置 Roundcube 核心包

如果安装过程中 Roundcube 的数据库配置未完整写入,或者之前曾中断过安装流程,可以直接重新执行一次:

sudo dpkg-reconfigure roundcube-core

在这一步里,需要注意几个关键选项。

是否使用 dbconfig-common 配置数据库

建议选择 Yes
这表示由系统自动创建 Roundcube 所需数据库、表结构以及配置文件,适合实验环境和标准部署场景。

数据库应用密码

如果界面提示输入 MySQL application password for roundcube,可以直接留空,让系统自动生成。这样可以减少手工输入错误,并由系统统一写入数据库配置文件。

数据库管理员密码

如果提示输入数据库管理员密码,而本机 MariaDB 使用本地 socket 认证方式,则通常可以直接留空;如果你手工给 MariaDB 的 root 设置过密码,则填写对应密码。

语言选择

将默认语言设为 ZH-CN 即可。这样 Roundcube 登录页和主界面会优先以中文显示,更适合本地实验展示。

IMAP 服务器地址

这一步必须明确指定 Dovecot 的加密 IMAP 服务地址,建议填写:

ssl://mail.ad.yxwa.info:993

这里使用的是 IMAPS,而不是普通的 143 端口。原因是前文已经验证过 Dovecot 的 993 端口工作正常,直接使用加密收信方式更符合实际部署习惯。

是否重装数据库

如果界面出现 Reinstall database for roundcube?,应选择 No
这一步只是重新配置 Roundcube,不需要删除并重建现有数据库。



检查 Roundcube 配置文件

配置完成后,Roundcube 的主配置文件位于:

/etc/roundcube/config.inc.php

数据库配置文件位于:

/etc/roundcube/debian-db-roundcube.php

先查看主配置文件:

sudo sed -n '1,220p' /etc/roundcube/config.inc.php

此时应重点关注几个字段:

  • imap_host
  • smtp_host
  • smtp_port
  • language

Roundcube 默认会把数据库连接逻辑写到独立文件中,因此主配置里通常会看到类似下面的写法:

include("/etc/roundcube/debian-db-roundcube.php");

这属于 Debian/Ubuntu 系的标准包管理方式,不需要额外改动。


修正 Roundcube 的 IMAP 与 SMTP 配置

虽然安装向导会写入一部分配置,但实际部署时仍然建议检查并手工确认一遍。

编辑主配置文件:

sudo nano /etc/roundcube/config.inc.php

将与收发信相关的部分调整为以下内容:

$config['imap_host'] = ["ssl://mail.ad.yxwa.info:993"];
$config['smtp_host'] = 'tls://mail.ad.yxwa.info';
$config['smtp_port'] = 587;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['language'] = 'zh_CN';

这里的含义可以简单说明如下。

imap_host 指向 Dovecot 的 IMAPS 服务,Roundcube 登录后通过该地址读取收件箱内容。
smtp_host 指向 Postfix 的 Submission 服务,采用 587 端口并通过 TLS 提交邮件。
smtp_user 与 smtp_pass 使用当前登录用户的用户名和密码。对于实验环境来说,这种方式足够直接。
language 则决定默认界面语言为中文。

修改完成后,重载 Apache:

sudo systemctl reload apache2

检查 Apache 是否已启用 Roundcube 配置

Ubuntu 的 Roundcube 包通常会安装 Apache 配置文件,但默认情况下,访问路径并不一定可直接使用,需要确认其 Alias 是否已经启用。

先查看 Apache 是否正常工作:

systemctl status apache2 --no-pager

然后查看 Roundcube 的 Apache 配置:

sudo cat /etc/apache2/conf-available/roundcube.conf

这里最关键的一行是:

Alias /roundcube /var/lib/roundcube/public_html

在某些环境中,这一行可能默认被注释掉。如果前面带有 #,说明 Apache 还没有把 /roundcube 映射到 Roundcube 程序目录,那么浏览器访问时通常只会得到 404。

因此需要编辑该文件:

sudo nano /etc/apache2/conf-available/roundcube.conf

确保这一行处于启用状态:

Alias /roundcube /var/lib/roundcube/public_html

保存后重新加载 Apache:

sudo systemctl reload apache2


验证 Web 路径映射是否生效

Apache 重载完成后,使用 curl 在本机验证 Roundcube 的访问路径。

执行:

curl -I http://127.0.0.1/roundcube
curl -I http://127.0.0.1/roundcube/

正常情况下:不带斜杠的路径会返回 301 Moved Permanently,带斜杠的路径会返回 200 OK

这一结果说明 /roundcube/ 已经被正确映射到 Roundcube 的 Web 根目录。

如果主站根路径也已正常工作,可以额外看一下:

curl -I http://127.0.0.1/

这样可以确认 Apache 主站本身没有问题。



处理 Apache 的 ServerName 提示

在 Ubuntu 默认环境中,Apache 经常会出现一条提示,表示没有明确设置全局 ServerName。虽然这不会影响 Roundcube 正常访问,但为了让 Web 服务日志和行为更加规范,建议顺手处理掉。

执行:

echo 'ServerName mail.ad.yxwa.info' | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo systemctl reload apache2

这样 Apache 在重载时就不会再提示无法可靠判断 FQDN。


通过浏览器访问 Roundcube

至此,可以直接在浏览器中访问如下地址:

http://mail.ad.yxwa.info/roundcube/

如果前面的 Apache Alias、Roundcube 配置和服务链路都正常,此时浏览器应出现 Roundcube 登录页面,并且界面语言显示为中文。

这一步的意义非常明确:它标志着邮件系统已经从后台协议服务进入到真正可视化的图形化阶段。



使用已有邮箱账户登录

当前实验环境中,Dovecot 使用系统账户作为认证来源,因此登录 Roundcube 时,直接使用前面创建的本地邮箱用户即可。

例如:

用户名:alice

密码:创建 alice 用户时设置的 Linux 本地密码

如果登录成功,Roundcube 会进入邮箱主界面,并自动读取该用户在 Dovecot 中对应的 Maildir 邮箱内容。

由于前文已经用命令行向 alice 投递过一封主题为 test-1 的测试邮件,因此登录成功后,通常可以直接在收件箱中看到这封邮件。

这一步实际验证了三个层面的联动:

Roundcube 能成功调用 Dovecot 的 IMAP 服务

Dovecot 能正确读取 Maildir 中的历史邮件

浏览器端界面已经与底层邮件系统完成联通



Webmail 图形化阶段的结果说明

完成以上步骤后,邮件系统已经具备基本可用的图形化入口。到这里可以确认:

  • Apache 已成功发布 Roundcube
  • PHP 运行环境已正常支持 Roundcube
  • MariaDB 已作为 Roundcube 的后端数据库正常工作
  • Roundcube 已能通过 IMAPS 连接 Dovecot
  • Roundcube 已能通过 Submission 端口连接 Postfix
  • 浏览器可正常访问中文登录页
  • 用户登录后可查看已有收件箱邮件

从实验效果来看,这已经不再是单纯的 Postfix + Dovecot 命令行环境,而是一套具备实际演示能力的 Webmail 系统。对于企业内网实验、课程设计答辩、邮件系统教学展示等场景,这一步非常关键,因为它直接把“后台服务可用”转换成了“前端体验可见”。


当前阶段的边界

需要说明的是,本文完成的是 Roundcube 图形化接入,而不是完整公网邮件平台发布。当前阶段主要适用于内网环境,尚未展开以下内容:

  • HTTPS 证书与强制加密访问
  • 公网 DNS 与 NAT 发布
  • 外部邮件客户端认证发信
  • 域用户直接作为邮箱主体登录收发
  • SPF、DKIM、DMARC 签名与策略
  • Web 访问安全加固

这里是后续(真的有点麻烦......)


此作者没有提供个人介绍。
最后更新于 2026-04-02