邮件系统一直是自建服务里公认门槛较高的领域,传统的Postfix加Dovecot组合需要分别配置收发服务、反垃圾组件、证书管理,动辄几十个配置文件。而Stalwart邮件服务器的出现改变了这一局面,它把SMTP、IMAP、JMAP、反垃圾、DKIM签名等功能全部集成在一个二进制程序里,配合Rust语言带来的内存安全和高并发特性,让个人用户和中小团队也能轻松拥有自己的邮件服务。本文将从邮件基础概念讲起,逐步带你完成Docker环境下的完整部署,并补充一些实用的进阶配置。

部署前必须搞懂的邮件基础知识
在动手之前,先花几分钟理解邮件系统的运作机制非常有必要,否则出了问题会完全无从排查。一封邮件从A发送到B,大致流程是:发送方的邮件客户端通过SMTP协议把邮件提交到发送方的邮件服务器,发送方服务器根据收件人域名查询DNS中的MX记录,找到负责接收该域名邮件的服务器地址,然后通过SMTP协议把邮件投递过去,收件方服务器再把邮件存入用户邮箱,收件人通过IMAP或POP3协议从服务器收取邮件。理解这条链路,你就知道自建邮件服务器至少需要SMTP收发能力和IMAP存储能力,而Stalwart恰好全部内置。
其次是DNS记录的配置,这是自建邮件服务能否正常收发的关键。除了MX记录外,还需要配置SPF记录,用来声明哪些服务器有权代表你的域名发送邮件;DKIM记录,用来存放邮件签名的公钥,接收方通过验证签名判断邮件在传输过程中是否被篡改;DMARC记录,用来告诉接收方当SPF或DKIM校验失败时该如何处理。这三种记录缺一不可,主流邮箱服务商如Gmail、Outlook对没有这些记录的来源邮件会直接拒收或扔进垃圾箱。
最后要考虑的是端口和IP的问题。邮件服务需要开放的端口包括25(服务器间SMTP投递)、465和587(客户端提交邮件)、993(IMAPS收信)。需要特别注意的是,很多云服务商默认封禁了25端口以防止垃圾邮件滥用,购买服务器前一定要确认可以申请解封,否则邮件发不出去,后续一切配置都是白费。另外,部分海外VPS的IP段信誉度较低,建议部署后先到相关黑名单查询平台检查一下自己IP是否在列。
使用Docker快速部署Stalwart
Stalwart官方提供了现成的Docker镜像,部署过程非常友好。先在服务器上创建一个工作目录用于存放配置和数据,然后编写docker-compose.yml文件即可。以下是一个可以直接使用的配置示例:
version: "3"
services:
stalwart-mail:
image: stalwartlabs/stalwart:latest
container_name: stalwart-mail
restart: always
ports:
- "25:25" # SMTP服务器间投递
- "465:465" # SMTPS客户端提交
- "587:587" # SMTP带STARTTLS提交
- "993:993" # IMAPS收信
- "443:443" # Web管理后台
volumes:
- ./data:/opt/stalwart
environment:
- FALLBACK_ADMIN=admin配置文件准备好后,执行docker compose up -d启动容器。首次启动时,Stalwart会自动生成管理员密码并打印在容器日志里,通过docker logs stalwart-mail查看。拿到密码后,浏览器访问服务器的443端口即可进入Web管理后台,首次登录需要设置管理员账户并选择存储后端,个人使用选择默认的内部存储即可,数据会落在挂载的data目录中,方便后续备份。
登录后台后的第一件事是配置TLS证书。进入Settings里的TLS选项,启用ACME自动申请功能,填入你的邮件域名,Stalwart会自动通过Let's Encrypt签发并续期证书,前提是域名的A记录已经正确指向服务器IP,且80和443端口可访问。证书签发成功后,SMTP和IMAP服务都会自动使用这份证书加密通信。
接下来是DNS部分。回到你的域名解析控制台,依次添加以下记录。假设邮件服务器域名为mail.ippipp.com,收发邮件域名为ippipp.com:
# A记录:邮件服务器地址 mail.ippipp.com. A 服务器IP # MX记录:指定收件服务器 ippipp.com. MX 10 mail.ippipp.com. # SPF记录:声明允许发信的服务器 ippipp.com. TXT "v=spf1 mx -all" # DKIM记录:在Stalwart后台生成公钥后填入 stalwart._domainkey.ippipp.com. TXT "v=DKIM1; k=rsa; p=公钥内容" # DMARC记录 _dmarc.ippipp.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@ippipp.com"
所有记录生效后(TXT记录通常几分钟到半小时不等),就可以在后台用测试工具验证配置是否正确,或者直接给自己注册一个测试账号,尝试用客户端收发一封邮件到Gmail等外部邮箱,观察是否能正常到达收件箱而不是垃圾邮件文件夹。
进阶配置与日常运维技巧
基础部署跑通之后,有几项配置能显著提升系统的稳定性和可维护性。第一是多域名支持,Stalwart原生支持在一台服务器上托管多个域名,只需要在管理后台的Domains页面添加新域名,重复一遍DNS记录的配置流程即可,各域名的DKIM密钥相互独立,互不影响。对于同时运营多个业务域的用户来说,这个功能可以省掉部署多套邮件系统的成本。
第二是反垃圾与安全策略的调优。Stalwart内置了基于SpamAssassin规则引擎的反垃圾模块,默认策略已经比较均衡,但建议根据实际使用情况调整评分阈值。同时强烈建议开启以下安全措施:在设置中限制发信频率,防止账号被盗后大量群发垃圾邮件导致IP信誉受损;启用DNSBL黑名单查询,在SMTP握手阶段直接拒绝已知垃圾邮件来源;对于管理后台,可以配置IP白名单,只允许自己的常用网络访问,避免后台暴露在公网被扫描爆破。
第三是账号体系的选择。个人使用直接在后台创建本地账号即可,但如果是团队使用,Stalwart支持对接外部认证源,比如LDAP目录或OIDC身份提供商,可以做到与企业现有账号体系统一管理,员工入职离职只需在统一平台操作,邮件账号自动同步。配置方式在后台的Directory选项中,按照向导填写LDAP服务器地址和查询条件即可。
第四是备份策略,这是最容易忽视却最致命的环节。邮件数据的价值往往远超服务器本身,务必做好定期备份。由于我们的数据都挂载在宿主机的data目录下,备份非常简单,写一个cron定时任务即可:
#!/bin/bash # 每天凌晨3点备份Stalwart数据目录 BACKUP_DIR=/backup/stalwart DATE=$(date +%Y%m%d) mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/stalwart_$DATE.tar.gz /path/to/data # 只保留最近30天的备份 find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
最后分享两个日常排查问题的技巧。一是善用日志,Stalwart的日志会记录每一次SMTP会话的详细过程,包括对方服务器的拒信原因,遇到发信被拒时查看日志能直接定位是DNS问题、IP黑名单问题还是内容被判为垃圾邮件。二是利用邮件头分析工具,把退信或被扔进垃圾箱邮件的原始邮件头复制到在线分析平台,可以清楚看到SPF、DKIM、DMARC每一项的校验结果,快速判断哪一环出了问题。
总的来说,Stalwart把传统上碎片化的邮件系统组件整合成了一个开箱即用的整体,配合Docker部署,整个过程从零到收发第一封邮件通常只需要一两个小时。真正需要花心思的反而是DNS配置和后续的IP信誉维护,只要前期把基础概念理清楚,自建邮件服务器完全在普通用户的能力范围之内。希望这篇教程能帮你顺利搭建起属于自己的邮件服务。
Docker部署Stalwart邮件服务器邮件服务器搭建修改时间:2026-09-03 22:08:01