「自建邮件服务器:docker-mailserver + rspamd + 本地 LLM 反垃圾」封面图
· 6 分钟阅读

自建邮件服务器:docker-mailserver + rspamd + 本地 LLM 反垃圾

本文也有English版本

在自建社区里,有一句老生常谈:「什么都能自建,就是别碰邮件服务器。」

黑名单、进不了收件箱、反垃圾形同虚设——这些 horror story 不假。但 2026 年情况变了:本地 LLM + rspamd 把最后一道坎(垃圾邮件)基本填平了。如果你在意数据主权,这篇值得认真看。

原文来自 MSP 从业者 Christian Haschek,他自己帮企业从 Gmail / Microsoft 迁出,也把自己的 Google Workspace 换成了自托管。

自建邮件与数据主权

先回答:家里能跑吗?

通常建议 VPS,但家里网络满足下面全部条件时,100% 可以

条件为什么重要
静态 IPv4动态 IP 会让 MX/PTR 失效;先查 黑名单
非 CGNAT运营商大内网 NAT 下,外网连不进 25 端口
PTR 可改反向 DNS 必须解析到 mail.yourdomain.com,只能找 ISP 开
端口开放25 143 465 587 993

断网会丢信吗? 一般不会。SMTP 发件方会重试;作者的经验是每天断网 <40% 仍正常。早期互联网 outages 多,协议就是为这个设计的。

选什么邮件软件?

方案适合谁
docker-mailserver从零开始首选,Docker 一键、默认合理
Stalwart现代 Rust 栈,性能党
Mailcow要 Web 管理面板的一体化方案
纯手工 Postfix+Dovecot极客/学习用,维护成本高

作者因历史原因用 ISPConfig;今天新开我会选 docker-mailserver

DNS:不配齐 = 进不了收件箱

邮件软件通常会引导你,但核心就这几条:

SPF(谁有资格代你发信)

v=spf1 mx a ~all

DKIM(每封邮件的加密签名)

服务器生成密钥对,把公钥写进 DNS TXT,形如:

v=DKIM1; t=s; h=sha256; p=MIGf[...]B;

DMARC(防域名伪造)

SPF/DKIM 的「政策层」,不确定就用 DMARC 生成器

MX + A 记录

  1. mail.yourdomain.com → A 记录指向服务器 IP
  2. MX 记录:优先级 10,值 mail.yourdomain.com

PTR(反向 DNS)

只能 ISP 或 VPS 商设置。 你的 IP 反向解析必须回到 mail.yourdomain.com,否则大厂邮箱直接拒收。

DNS 记录与邮件可达性

上线前必做:mail-tester.com 发一封测试信,看 SPF/DKIM/DMARC/黑名单/内容评分——作者说这条工具救过他很多次。

反垃圾:本地 LLM 改变了游戏规则

传统开源反垃圾靠 IP 黑名单、关键词、Spamhaus——效果差到逼人回流 Gmail。大厂的优势是「每天处理几亿封邮件」的集体智能。

方案:rspamd + GPT 插件 + 本地 llama.cpp

rspamd 本身有黑名单、DNS、贝叶斯;真正质变的是 GPT 插件——把邮件 headers + subject + body 丢给 LLM,让它返回 JSON:

{
  "probability": 0.85,
  "reason": "unsolicited commercial content with suspicious Punycode URL"
}

隐私前提: 邮件是高敏数据,不能把全文发给 OpenAI API。答案是用本地模型

推荐模型与安装

模型: unsloth/gemma-4-12B-it-qat-GGUF:UD-Q4_K_XL — 约 7GB RAM/VRAM,多语言,分类够用。

# macOS / Linux
curl -LsSf https://llama.app/install.sh | sh

# 启动 OpenAI 兼容 API
llama serve -hf unsloth/gemma-4-12B-it-qat-GGUF:UD-Q4_K_XL \
  --reasoning off -fa on -c 16000 --temp 0.7

浏览器打开 http://localhost:8080 能聊天,说明服务 OK。

rspamd 配置示例

/etc/rspamd/local.d/gpt.conf

allow_ham = true;
allow_passthrough = true;
enabled = true;

type = "openai";
url = "http://192.168.1.5/v1";
model = "unsloth/gemma-4-12B-it-qat-GGUF:UD-Q4_K_XL";
api_key = "this-is-ignored-on-llama.cpp";

max_tokens = 100;
temperature = 0.1;
timeout = 30.0;
json = true;

prompt = "You are an expert email spam classifier. Analyze the following email headers, subject, and body. Respond with a JSON object containing two keys: 'probability' (a floating point number between 0.0 and 1.0 indicating spam probability) and 'reason' (a short sentence explaining why). Output only the raw JSON object, no markdown code fences.";

context {
  enabled = true;
  level = "user";
  min_messages = 5;
  message_ttl = 1209600;
  ttl = 2592000;
}

context 块会在 Redis 里存收件人近期邮件摘要(14 天 digest),5 封以上后开始注入 prompt——分类会越来越「懂你的收件习惯」,且全程本地。

本地 LLM 邮件分类流水线

无 GPU?timeout 调大;CPU 推理慢但能跑。

rspamd 自带 Web UI,可以粘贴任意邮件看「如果当时会怎么判」——调 prompt 和阈值时很有用。

客户端用什么?

作者桌面用 Thunderbird——开源、搜索够用、Android 也有。Webmail 党可以选 Mailcow 等套件自带面板。

运维:你掌控一切,也负责一切

docker-mailserver 等现代方案支持自动安全更新,但备份和恢复演练是你自己的活:

  • 邮件数据丢了 = 业务/个人通信全灭
  • 至少做一次「假装硬盘坏了」的恢复测试
  • 远程访问、密钥轮换、rspamd 规则更新——纳入常规 checklist

邮件服务器运维与备份

快速决策表

你的情况建议
有静态 IP + PTR,在意隐私家里 docker-mailserver + 本地 LLM
网络条件一般VPS(Hetzner / 等)+ 同样栈
只要 @mydomain.com 收发,不想养 MTA看 Cloudflare Workers 路线(如 Cloud-Mail)
企业合规、多人协作Mailcow / 托管 + 严格备份策略

结论

能建、能用、垃圾邮件可控。 短时间的 server down 不会丢信;真正卡住人的 DNS/PTR 和反垃圾,现在都有成熟解。

如果你已经在跑 homelab、本地 LLM,把 rspamd 接上可能是性价比最高的下一步——Gmail 级的本地收件箱,数据不出家门。


参考原文: You should self-host your mail server

相关文章

评论