项目/邮箱通讯
邮箱通讯 · 运行中

自建邮箱(Brevo 中继)

用自己域名邮箱收发信:VPS 收信 + Brevo 免费中继发信,全链路 SPF/DKIM/DMARC 通过。

docker-mailserverBrevoSMTPDMARC

这是什么

这是我用自己域名 xiejun-server.top 搭的一套私人邮箱:家里 VPS 上跑 docker-mailserver 负责收信,发信走 Brevo 免费中继。客户端用 IMAP 993、SMTP 465/587 收发,使用体验和普通邮箱没有差别。

为什么做

一是我想要一个真正属于自己的长期邮箱地址,不绑定任何厂商;二是腾讯云 VPS 的出站 25 端口被网络层封锁了,安全组放行也没用,所以发信只能借 ESP 中继。同时也借这个机会,把 SPF、DKIM、DMARC 这套域名认证彻底搞明白一遍。

现在怎么样

2026-10-18 上线,状态运行中。收信入站 25 已验证公网可达,外部能直接投递进来;发信实测能送达外部邮箱。mail-tester 检测 dmarc=pass、dkim=pass、spf=pass,评分 4.7/10,SpamAssassin 判定未达垃圾阈值。唯一消不掉的限制是 .top 后缀本身有声誉扣分,这是域名固有的,代码层面解决不了。

功能

  • VPS 上用 docker-mailserver 收信,Dovecot 提供 IMAP/SSL 993
  • 出站 25 被封,改由 Brevo 免费中继投递(300 封/天)
  • Brevo 完成根域与 send 子域认证,由 Brevo 用自有域名重签 DKIM
  • DMARC 设 p=quarantine 并留报告地址,mail-tester 三项全 pass
  • Let's Encrypt 证书经 frp 隧道走 HTTP-01 自动续期
  • 邮件数据放 8G loop ext4 镜像,便于备份与迁移

技术栈

docker-mailserverDocker ComposePostfixDovecotOpenDKIMBrevo SMTP 中继Let's Encryptfrp

使用 / 部署教程

部署步骤

  1. 准备:一个域名、一台入站 25 可达的 VPS、装好 Docker 与 Compose。注意先确认服务商是否封锁出站 25,被封就得走中继。
  1. 基础 DNS:MX @ → mail.你的域名(优先级 10),A mail → VPS 公网 IP。解析生效前别急着起服务。
  1. 拉起 mailserver:准备 compose.yaml 和 mailserver.env。关键变量:OVERRIDE_HOSTNAME 填邮件主机名、NETWORK_INTERFACE 填宿主机网卡(用 host 网络)、SSL_TYPE=manual 并指向证书路径。数据目录建议单独挂一个镜像文件,方便快照。
  1. 证书:Let's Encrypt 走 HTTP-01,我这里借用 frp 隧道把 80 端口暴露出去,cron 定时续期后重启容器。手动证书模式下续期不会自动重载,记得重启。
  1. 建账号:docker exec mailserver setup email add <地址> <密码>;删除用 setup email delete,查看用 setup email list。默认不开 catch-all,未创建的地址直接拒收。
  1. 接入 Brevo:注册免费账号并完成手机验证,在后台做域名认证——根域和发信子域都要做,因为 Brevo 只对已认证域用你域名签 DKIM。把 brevo-code 的 TXT 和 brevo1/brevo2._domainkey 的 CNAME 加进 DNS。然后在 mailserver.env 里配 RELAY_HOST、RELAY_PORT=587、RELAY_USER、RELAY_PASSWORD(SMTP key),重启容器。
  1. DMARC:加 _dmarc TXT,起步可用 p=quarantine 并留 rua 报告地址。发信走 Brevo 的 SPF,我方域不再需要 SPF,DMARC 靠 DKIM 对齐通过。
  1. 客户端:IMAP 主机 mail.你的域名 993 SSL/TLS;SMTP 同主机 465 或 587。
  1. 验证:拿 mail-tester 发一封测试信,看 spf/dkim/dmarc 三项是否 pass、SpamAssassin 是否低于阈值。再给 Gmail、QQ 各发一封确认进收件箱。

注意

  • 资料中的邮箱密码、Brevo 账号与 SMTP key 属于敏感凭据,不要提交进仓库,改用环境变量或密钥管理;本文示例已隐去。
  • 中继服务的免费额度(当前 300 封/天)和条款可能变化,群发前先确认,避免超限退信。
  • Brevo 会改写邮件正文,导致本机 OpenDKIM 签名显示 fail;DMARC 靠 Brevo 重签的签名通过,不影响投递,想日志干净可关掉出站签名。