自己收邮件这件事,我断断续续折腾了三年。最开始是 Postfix + Dovecot,配置散落在十几个文件里,每次升级都心惊胆战。后来换成了 Stalwart —— 一个用 Rust 写的 all-in-one 邮件服务器。
为什么不继续用 Postfix
不是 Postfix 不好,是我不想再维护它了。Stalwart 把 SMTP、IMAP、JMAP、Spam 过滤全放在一个进程里,配置只有一份 TOML。
NixOS 模块
NixOS 已经有 services.stalwart-mail 模块了,最小可用配置大概长这样:
services.stalwart-mail = {
enable = true;
settings = {
server.hostname = "mail.example.com";
server.listener."smtps".bind = [ "[::]:465" ];
server.listener."imaps".bind = [ "[::]:993" ];
certificate = {
default.cert = "/var/lib/acme/mail.example.com/fullchain.pem";
default.key = "/var/lib/acme/mail.example.com/key.pem";
};
};
};
证书交给 security.acme 自己续,记得把 acme 用户加进 stalwart-mail 组,否则读不到私钥。
DNS 记录别写错
邮件能不能收到,八成取决于 DNS。至少要这几条:
MX指向mail.example.comA/AAAA指向真实的公网地址TXT的 SPF:v=spf1 mx ~all_dmarc的 DMARC:v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com- DKIM 由 Stalwart 生成,公钥贴到
selector._domainkey即可
提醒一句:家宽 25 端口基本都是被封的,发信老老实实走中转,别硬刚。
效果
现在整台机器的邮件相关配置不到 100 行,nixos-rebuild switch 之后就再也不用管了。收信延迟从原来的两三秒变成了几乎瞬时,客户端用 Thunderbird 通过 JMAP 连接,同步速度肉眼可见地变快。
折腾了三年,终于可以开始用邮件了。