Loading... # 从零搭建属于自己的邮件系统:Stalwart + Brevo + Typecho > 本篇记录由ChatGPT生成。汇总搭建过程中作为辅助Agent的所有对话内容形成本文。本文头图亦由GPT生成。 搭建完个人网站之后,我一直觉得还缺少一块重要的拼图——属于自己域名的邮件系统。 一方面,希望拥有一个真正属于自己的域名邮箱,用于日常通信;另一方面,也希望博客的评论通知、联系表单、系统邮件都能够统一从自己的域名发出,而不是继续依赖第三方邮箱。 于是,花了几天时间,把整套邮件系统完整搭建了一遍。目前已经实现: - 域名邮箱正常收发 - Apple Mail 原生收发 - Typecho 评论邮件通知 - SMTP Relay 外网投递 - SPF、DKIM、DMARC 配置完成 - Mail Tester 基本通过测试 目前唯一遗留的问题是,新域名通过 SMTP Relay 发往部分邮箱时,偶尔仍会被标记为"疑似诈骗邮件"。这一点主要与域名信誉有关,需要随着发信历史逐渐积累。 --- # 为什么选择 Stalwart? 在正式部署之前,我对目前比较主流的几种邮件服务器都进行了了解。 传统方案通常是 **Postfix + Dovecot**,功能成熟、生态丰富,但配置相对复杂;**Mailcow**、**Mailu** 等则提供了一整套 Docker 化解决方案,不过对于个人博客而言,资源占用和维护成本都略高一些。 最终我选择了 **Stalwart Mail Server**。 原因主要有几点: - 单容器即可部署完整邮件服务 - 内置 SMTP、IMAP、POP3、JMAP - 自带现代化 Web 管理后台 - 配置简单,文档完善 - 资源占用极低 - Docker 部署非常方便 对于个人服务器来说,它几乎就是开箱即用。 --- # 整体架构 整个邮件系统最终采用了下面这套架构。 ```text Internet │ ▼ Mail Server │ ├── SMTP ├── IMAP └── Web Admin │ ▼ SMTP Relay │ ▼ QQ / Gmail / Outlook ... ``` 而网站发送邮件,则通过另一条链路: ```text Typecho │ SMTP │ ▼ Mail Server │ ▼ SMTP Relay │ ▼ 用户邮箱 ``` 这样设计最大的好处是: 网站永远只连接自己的邮件服务器。 以后即使需要更换 SMTP 服务商,也只需要修改邮件服务器配置,博客完全不需要重新配置。 --- # Docker 部署 整个邮件系统采用 Docker Compose 部署。 首先创建数据目录: ```bash mkdir data mkdir config ``` 随后拉取官方镜像: ```yaml services: stalwart: image: ghcr.io/stalwartlabs/stalwart:latest ``` 部署完成后即可访问后台。 第一次进入后台时,会完成初始化向导,包括: - 创建管理员账号 - 设置默认域名 - 选择存储方式 - 配置 Directory - TLS 配置方式 这里我选择的是: - Internal Directory - RocksDB - 手动配置 TLS - 手动配置 DNS 对于个人使用来说,这套配置已经足够稳定。 --- # 域名解析 邮件系统真正重要的,其实不是软件,而是 DNS。 至少需要配置以下几项记录: - A - MX - SPF - DKIM - DMARC 其中: **MX** 决定邮件发送到哪台服务器; **SPF** 声明哪些服务器可以代表你的域名发信; **DKIM** 用数字签名证明邮件没有被篡改; **DMARC** 告诉收件服务器,当 SPF、DKIM 验证失败时应该如何处理邮件。 很多邮件进入垃圾箱,并不是因为 SMTP 配置错误,而是 DNS 配置没有完成。 --- # TLS 证书 邮件协议同样需要 TLS 加密。 我直接使用 Let's Encrypt 申请证书。 需要注意的是,导入证书时不仅需要证书文件,还需要对应的私钥: - fullchain.pem - privkey.pem 配置完成之后,可以使用 OpenSSL 测试 SMTP 是否已经成功启用 TLS。 只要客户端能够正常建立 SSL/TLS 连接,就说明邮件服务器已经具备安全通信能力。 --- # 创建邮箱 我将邮箱分成了两类: - 日常通信邮箱 - 网站发信邮箱 这样做有几个好处。 首先,网站产生的大量通知邮件不会影响日常使用。 其次,如果以后更换 SMTP Relay 服务,只需要修改网站发信账号即可,不影响个人邮箱的正常收发。 对于网站来说,这也是一种更加规范的做法。 --- # 为什么还需要 SMTP Relay? 理论上,邮件服务器部署完成之后,就能够直接向公网发送邮件。 但实际部署时,很快发现国内云服务器普遍限制服务器主动连接公网 25 端口。 也就是说: 服务器可以正常收信,却无法直接向 QQ、163、Gmail 等邮箱投递邮件。 因此最终选择引入 **SMTP Relay**。 整个发送流程变成: ```text 网站 ↓ 自己的邮件服务器 ↓ SMTP Relay ↓ 公网邮箱 ``` 这样不仅解决了运营商限制的问题,同时也能够借助专业邮件服务商的投递能力,提高邮件送达率。 对于个人博客来说,这也是目前最成熟的一种方案。 --- # Apple Mail 邮件服务器部署完成之后,第一个测试对象就是 Apple Mail。 配置过程非常简单,只需要填写服务器地址,并启用: - IMAP - SMTP 即可正常完成收发。 整个使用体验与普通邮箱没有任何区别。 能够在 Mail.app 中直接管理自己的域名邮箱,还是挺有成就感的。 --- # Typecho 评论通知 既然已经拥有了自己的邮件服务器,自然希望博客也统一使用自己的域名发送邮件。 于是为 Typecho 配置了评论通知插件。 目前已经实现: - 新评论通知站长 - 评论回复通知访客 整个发送流程全部经过自己的邮件服务器,再由 SMTP Relay 完成最终投递。 至此,博客终于实现了: - 图片自己托管 - 文件自己托管 - 邮件自己托管 整个网站生态真正形成了一个完整的闭环。 --- # Mail Tester 邮件系统部署完成之后,非常推荐使用 Mail Tester 对邮件进行检测。 它会检查: - SPF - DKIM - DMARC - TLS - 邮件内容质量 经过调整之后,大部分验证均已通过。 目前唯一仍需继续优化的,就是新域名的发信信誉。 对于新注册域名来说,这属于比较普遍的现象,需要随着时间和稳定的发信历史逐步改善。 --- # 一些体会 整个部署过程中,最大的收获其实并不是拥有了一套邮件系统。 而是真正理解了一封邮件,是怎样从自己的服务器,最终进入别人收件箱的。 以前总觉得: > 发邮件,不就是 SMTP 吗? 真正部署之后才发现,一封邮件能够顺利送达,需要很多环节共同协作。 DNS 告诉别人如何找到你的服务器。 TLS 保证整个传输过程安全。 SMTP 负责发送。 IMAP 负责收取。 SPF、DKIM、DMARC 决定别人是否愿意相信你的邮件。 SMTP Relay 则负责真正完成公网投递。 邮件系统更像是一条完整的流水线,而不是一个单独的软件。 --- # 写在最后 到这里,整个网站终于拥有了一套完整的基础设施。 网站、图床、文件管理、邮件系统、推流服务,都已经能够独立运行。 对于个人博客来说,它们未必每天都会被频繁使用。 但当真正需要的时候,你知道所有数据、所有服务,都运行在自己的服务器上。 这种"从域名到内容,再到邮件系统,都掌握在自己手里"的感觉,大概也是折腾服务器最大的乐趣所在。  最后修改:2026 年 07 月 23 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果愿意的话...或许可以请我喝杯奶茶。