作者:寒花(助手:GPT-5.4)
如果你想拥有一个真正属于自己的邮箱,比如 me@yourdomain.com,最直接的思路通常是:准备一台服务器,部署邮件服务,配置域名解析,然后接入邮件客户端使用。
实际操作时,真正的关键不在于“有没有装上邮件软件”,而在于你选择的服务器是否适合承担公网邮件入口。如果服务器能够稳定接收来自互联网的 SMTP 投递,那么可以走标准邮件服务器方案;如果服务器不适合直接开放 25 端口收件,那么更适合采用“平台代收入口、本机负责邮箱本体”的方案。
这篇文章写的就是一套适合个人使用的域名邮箱搭建思路,并且尽量按教程的方式组织,方便后续整理成给 agent 执行的操作文档。
一、先明确要实现什么
这套方案完成后,目标应当包括:
- 拥有自己的域名邮箱账号,例如
admin@yourdomain.com - 能接收外部邮箱发来的邮件
- 能从自己的域名邮箱向外发信
- 能接入 Thunderbird 等邮件客户端
- 能继续扩展普通邮箱账号、别名和 catch-all
- 能通过脚本完成基础收发测试
如果只是为了自用,不需要一开始就追求企业级邮件平台。先做出一套可收、可发、可登录客户端、可长期维护的系统,比堆很多附加组件更重要。
二、准备条件
开始之前,先准备好以下资源。
1. 服务器
至少需要一台 Linux 服务器,建议条件如下:
- 1GB 内存起步,2GB 更稳
- 至少 10GB 磁盘空间
- 能通过 SSH 登录
- 系统为常见 Linux 发行版
- 能正常安装 Docker、Python 和基础依赖
如果服务器上已经运行了很多服务,建议先确认还有足够可用内存,避免邮箱服务部署后长期处于资源紧张状态。
2. 域名
需要一个自己的域名,例如:
yourdomain.com
建议同时预先规划一个邮件服务地址,例如:
mail.yourdomain.com
它可以用于 IMAP、SMTP、证书、客户端配置以及后续标准化管理。
3. Cloudflare 账号
如果你的服务器不适合直接开放公网 25 端口,那么需要:
- 一个 Cloudflare 账号
- 域名 DNS 托管在 Cloudflare
- 能使用 Cloudflare Email Routing
- 能部署 Cloudflare Worker
如果你的服务器可以直接收 25 端口邮件,那么 Cloudflare 不是必须条件,只要你能正常配置 DNS 即可。
4. 核心软件
本教程中的邮箱本体推荐使用:
- Stalwart Mail Server
它负责:
- 邮件存储
- 账号管理
- IMAP
- SMTP
- 管理后台
如果你走“无 25 端口”的方案,还需要一个很轻量的桥接服务,作用是把平台转来的邮件重新提交到本机邮箱系统中。
三、先判断走哪条路线
在开始部署前,先确认你的服务器属于哪一种情况。
情况 A:服务器可以直接通过公网 25 端口接收外部邮件
如果满足这一点,那么可以走标准方案:
- 部署 Stalwart
- 初始化域名和邮箱账号
- 配置 DNS 中的 MX、SPF、DKIM、DMARC 等记录
- 让外部邮件服务器根据 MX 记录直接投递到你的服务器
- 完成收发测试和客户端接入
这种情况下,不需要 Cloudflare Email Routing,也不需要桥接服务。
情况 B:服务器不适合直接通过公网 25 端口接收外部邮件
如果外部邮件无法稳定直接投递到你的服务器,那么不要继续强行走纯直收路线,而是改用:
- Cloudflare Email Routing 作为收件入口
- Cloudflare Worker 作为中转层
- 本机桥接服务把邮件交给 Stalwart
四、标准直收方案
如果你的服务器可以正常承接公网 25 端口邮件,那么搭建过程相对直接。
第一步:部署 Stalwart
先在服务器上部署 Stalwart Mail Server,并准备好:
- 容器运行环境
- 配置目录
- 数据目录
- 对外监听的邮件端口
- 管理后台访问入口
部署完成后,应当确认:
- Stalwart 后台能够正常访问
- 邮箱域名可以初始化
- 管理员账号可以创建并登录
- SMTP、IMAP 等协议端口已经正常工作
第二步:初始化邮件域名与账号
在 Stalwart 中完成这些基础配置:
- 设置服务器主机名,例如
mail.yourdomain.com - 设置默认邮箱域名,例如
yourdomain.com - 创建管理员邮箱,例如
admin@yourdomain.com - 根据需要创建普通用户邮箱、别名或 catch-all 规则
第三步:配置 DNS
在域名 DNS 中完成邮件相关记录:
A或AAAA:指向mail.yourdomain.comMX:指向你的邮件主机TXT:配置 SPFTXT:配置 DKIM 公钥TXT:配置 DMARC
如果没有正确配置这些记录,即使服务本身能运行,也可能导致发信可信度低、收信异常或客户端自动发现失败。
第四步:测试收发
完成 DNS 配置后,做两类测试:
- 外部邮箱发送到你的域名邮箱,确认能收到
- 你的域名邮箱发送到外部邮箱,确认能正常到达
如果以上都正常,再进行客户端接入即可。
第五步:接入邮件客户端
推荐使用 Thunderbird 作为日常邮件客户端,配置以下内容:
- IMAP 服务器
- SMTP 服务器
- 邮箱账号
- 密码
- 加密方式
到这里,标准直收方案就完成了。
五、无 25 端口方案
如果你的服务器不能稳定承接公网 25 端口邮件,那么更适合采用“平台代收入口 + 本机邮箱系统”的方式。
这条路线的核心思路是:
发件人
→ Cloudflare Email Routing
→ Cloudflare Worker
→ 服务器桥接服务
→ Stalwart Mail Server
在这个方案里,Cloudflare 负责接住外部邮件,服务器负责真正的邮箱存储和客户端服务。
第一步:先部署 Stalwart
即使你不走公网 25 端口直收,Stalwart 仍然是邮箱本体。 所以第一步仍然是部署并初始化 Stalwart,完成这些工作:
- 创建配置目录和数据目录
- 启动邮箱服务
- 初始化域名
- 创建管理员邮箱
- 开启 IMAP / SMTP 服务
- 确认后台能登录
第二步:在 Cloudflare 开启邮件入口
接下来在 Cloudflare 侧完成:
- 开启 Email Routing
- 让你的域名具备邮件接收入口
- 配置收件规则
- 规划是否启用 catch-all
- 准备好相关 DNS 记录
这一步的作用不是替代你的邮箱系统,而是帮你接住原本应该打到 25 端口的邮件。
第三步:部署 Worker
Worker 的职责非常明确:
- 接收 Email Routing 传来的邮件
- 提取发件人、收件人、主题、正文、HTML、头信息等内容
- 转换成标准化 JSON
- 以 HTTP 请求发送到你的服务器桥接服务
第四步:部署桥接服务
桥接服务是这条链路里的本机入口。它需要完成:
- 提供一个邮件接收接口
- 校验请求是否来自你自己的 Worker
- 接收并解析邮件 JSON
- 把邮件重新提交进本机 Stalwart
这里建议采用认证提交方式,而不是匿名本地投递。也就是说,桥接服务应当像一个正常的发件客户端一样,把邮件通过受信通道提交到 Stalwart。这样更利于邮件进入正常收件箱,也更容易保持链路一致性。
第五步:打通整条链路
完成 Worker 和桥接服务后,做完整收件测试:
- 从外部邮箱向你的域名邮箱发送测试邮件
- 确认 Worker 是否正确收到并转发
- 确认桥接服务是否收到并提交邮件
- 确认 Stalwart 中是否能看到邮件
- 确认 IMAP 也能读到相同邮件
第六步:配置发件与客户端
虽然收件入口交给了 Cloudflare,但发件仍然由你自己的邮箱系统负责。 因此还需要继续确认:
- Stalwart 的 SMTP 发件能力正常
- 外部邮箱能收到你的测试邮件
- Thunderbird 等客户端可以正常登录并收发
到这里,无 25 端口方案就完成了。
六、收发测试与客户端接入
无论你走哪条路线,最后都应当补上两部分内容。
1. 收发测试脚本
建议额外准备两类测试工具:
- 收件测试脚本:通过 IMAP 登录邮箱,读取最新邮件
- 发件测试脚本:通过 SMTP 登录邮箱,向外部邮箱发送测试邮件
如果你在 Windows 上使用,也可以额外准备一个 bat 启动入口,用于一键执行测试。
2. 邮件客户端接入
最终日常使用时,推荐接入 Thunderbird。 配置完成后,你就可以像使用普通邮箱一样管理:
- 收件箱
- 发件箱
- 已发送
- 草稿
- 未读已读状态
- 附件邮件
如果只是测试阶段,可以先使用管理员账号;如果准备长期使用,建议后续再创建一个普通用户邮箱作为日常主账号。
七、结论
搭建域名邮箱时,最先要确定的不是“选哪个邮件软件”,而是“服务器适合走哪条收件路线”。
如果服务器可以稳定承接公网 25 端口邮件,那么直接部署 Stalwart,配好 DNS,即可走标准直收方案。 如果服务器不适合直接对公网收件,那么就不要强行直收,而应改用 Cloudflare Email Routing + Worker + 桥接服务 + Stalwart 的组合。
前者更标准,后者更适合很多现实环境。 无论选择哪一种,核心目标都应当是:做出一套真正能收、能发、能接入客户端、能长期维护的域名邮箱系统。