你应该在2026年自托管邮件

Lobsters Hottest 工具

摘要

一篇博客文章,主张在2026年自托管邮件是可行的,提供了关于需求(静态IP、DNS记录)的指导,并推荐了如docker-mailserver、Stalwart或Mailcow等软件。

<p><a href="https://lobste.rs/s/x3x2aw/you_should_selfhost_your_mail_2026">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/24 04:58

# Christian Haschek 的博客 来源:https://blog.haschek.at/2026/you-should-selfhost-your-mail.html 如果你在**自托管**(https://www.reddit.com/r/homelab/)或**数据主权**(https://www.reddit.com/r/BuyFromEU/)社区里混过几天,总会有一个建议反复出现: > ## 你可以自托管任何东西,但千万别碰邮件服务器! 我理解他们为什么这么说,因为关于黑名单和投递问题的恐怖故事比比皆是。但今天我想向你证明,在 2026 年,这件事完全是可行的,你甚至可以在家自托管!从设计上讲,电子邮件是一个开放系统,我们不应该接受让少数大公司拥有我们所有的邮件,并让互联网在这个过程中变得不那么去中心化。 由于我的小型 MSP 公司(https://haschek-solutions.com/)每天都在帮助个人和企业从 Gmail 和 Microsoft 迁移到云替代方案或自托管方案,我认为我应该践行自己的主张,也离开 Google Workspace。 ## 在家还是用 VPS? 那些愿意自托管邮件服务器的少数人,又分成了两派:有胆量在家托管的和只愿意用 VPS 的。通常我会建议用 VPS,但如果你家宽满足以下条件,你完全可以在家自建邮件服务器: - 拥有静态 IPv4 地址(确保它**没有被列入黑名单**(https://mxtoolbox.com/blacklists.aspx)) - 不在 CGNAT 后面 - 能够修改 IP 的 PTR 记录(通常需要通过 ISP 支持) - 能够打开常见的邮件服务器端口(`25`、`143`、`465`、`587`、`993`) 如果以上都满足,那你就准备好在家托管了! ### 但网络中断怎么办?如果我的调制解调器掉线,我就会丢失收到的邮件,对吗? 这取决于你的中断时间长短,但通常答案是:不会!电子邮件非常健壮,如果你的邮件服务器宕机,发送方会重试投递,因为早期的互联网中断很常见。 如果你的网络在任意一天内中断时间少于 40%,它仍然可以正常工作。 ## 我应该使用什么邮件服务器软件? 这实际上取决于你的需求。市面上有多个邮件服务器解决方案,托管方式各不相同。 一个不错的起点是 **docker-mailserver**(https://github.com/docker-mailserver/docker-mailserver),它是一个完整的邮件服务器套件,可以通过 Docker 部署,并带有合理的默认配置。 但还有其他解决方案,比如: - Stalwart(https://stalw.art/) - Mailcow(https://github.com/mailcow/mailcow-dockerized) - 或者,如果你是个纯粹主义者,你可以**自己从头搭建整个服务器**(https://www.dchost.com/blog/en/i-built-my-own-mail-server-postfix-dovecot-rspamd-and-the-calm-path-to-deliverability-with-ip-warm%E2%80%91up/) 就我个人而言,我的邮件托管在我的 **ISPConfig 服务器**(https://www.ispconfig.org/)上,出于历史原因我已经维护了好几年。如果今天让我从头搭建邮件服务器,我会选择 docker-mailserver。 ## 我的域名呢? 和你的 IP 地址一样,你应该**检查你的域名是否被列入任何垃圾邮件列表**(https://mxtoolbox.com/blacklists.aspx),但你还需要一些 DNS 记录,以避免投递问题。 你的邮件服务器软件很可能会引导你完成所有这些设置,但为了完整性,你至少需要这些记录: - **SPF**(https://en.wikipedia.org/wiki/Sender_Policy_Framework)——发件人策略框架,定义哪些服务器可以代表你的域名发信。通常像 `v=spf1 mx a ~all` 这样的就足够了。 - **DKIM**(https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail)——这是你的邮件服务器在每封外发邮件的邮件头中添加的加密签名。你的域名需要有一个特定的条目,名称和值将由你的邮件服务器告知。通常长这样:`v=DKIM1; t=s; h=sha256; p=MIGf[...]B;` - **DMARC**(https://dmarc.org/)——这个条目基本上是 SPF 和 DKIM 的扩展,用于防止你的域名被伪造电子邮件。如果你不确定该填什么,可以使用**DMARC 生成器**(https://mxtoolbox.com/DMARCRecordGenerator.aspx) - **MX**——MX 记录告诉其他邮件服务器应该将邮件投递到你域名的哪个位置。通常你会为 `mail.yourdomain.com` 创建一个 A 记录,指向你的 IP,然后在 MX 记录中设置优先级 10,值为 `mail.yourdomain.com` 另外,如前所述,你用于邮件服务器的 IP 地址应该有一个 PTR 记录,该记录只能由你的 ISP 或 VPS 提供商设置。它允许服务器的 IP 解析为一个域名(通常是相反的情况),并且必须显示为你用于邮件服务器的主机名。例如 `mail.yourdomain.com` 一些邮件服务器还建议你添加更多记录以实现自动服务检测,但这些是开始所需的核心设置。 设置好域名和服务器后,我强烈建议你通过 **https://www.mail-tester.com/** 测试邮件的投递情况,它会检查所有记录是否正确以及你的服务器是否按预期运行。这个工具救了我无数次。 ## 垃圾邮件呢? 有趣的部分来了!垃圾邮件曾经是自托管邮件服务器的最大问题。情况糟糕到我认为这是人们放弃自托管甚至放弃(外部)托管的网页邮件(通常在购买网页空间或域名时免费附带)的最大原因。 开源反垃圾邮件解决方案依赖于 IP 黑名单、域名黑名单、外部反垃圾邮件服务(如 Spamhaus)或关键词搜索——所有这些都非常低效,导致你的收件箱每天看起来都像这样: 街上流传的说法是,如果你不想要垃圾邮件,就必须使用 Gmail 或任何其他每天通过处理数百万客户邮件来检测垃圾邮件的大型云提供商。 但在过去两年里,有些事情发生了变化,解决了自托管者的垃圾邮件问题,让我们能够再次托管自己的邮件服务器,而不会被垃圾邮件淹没: ### 使用本地大语言模型对抗垃圾邮件 我选择的自托管反垃圾邮件服务是 **rspamd**(https://rspamd.com/)。它初始时和其他反垃圾邮件系统一样,拥有黑名单、IP 检查、DNS 检查和关键词监控,但有一个插件完全解决了我的垃圾邮件问题:**GPT 插件**(https://docs.rspamd.com/modules/gpt/) 这个小插件允许你使用大语言模型对邮件进行分类,判断它是否为垃圾邮件。 我可以整天看着 LLM 对垃圾邮件进行分类。由于我们是自托管者,而且这样做也是为了隐私,使用外部 LLM API 分析我们所有的私人电子邮件是没有意义的——这时本地模型就派上了用场。 我用于邮件分类的首选模型是 **Gemma 4 12B QAT**(https://huggingface.co/unsloth/gemma-4-12B-it-qat-GGUF),它可以在 GPU 或 CPU 上运行,仅需 7GB 的 RAM 或 VRAM,并且是一个能力很强的多语言模型,非常适合这个项目。 如果你以前从未设置过本地 LLM,我推荐 **unslo*sh 的这篇指南**(https://unsloth.ai/docs/models/gemma-4/qat#llama.cpp-guide),它适用于 Windows、Linux 和 Mac。但简而言之,如果你在 Linux 或 macOS 上,只需运行 `curl -LsSf https://llama.app/install.sh | sh`;如果在 Windows 上,运行 `winget install llama.cpp`。 安装完成后,你可以使用以下命令向世界暴露你的 LLM: `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/,你应该会看到一个聊天界面。 你自有的本地 AI!你可以在这里和它聊天,但我们要把它连接到我们的 rspamd 实例,让它评判所有收到的邮件。 一旦运行正常,你只需告诉 rspamd 使用你的本地 LLM 来评判邮件。例如,下面是我邮件服务器上的 `/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; # 如果你的LLM服务器没有GPU,你可能需要增加超时时间 timeout = 30.0; # 将LLM回复解析为JSON(模块期望key为"probability",而非"spam") 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."; # 每个收件人的对话上下文:将最近邮件(标签、主要发件人、512字符摘要)的紧凑摘要保存在redis中, # 一旦收集到5条以上消息,就将其注入LLM提示,以便分类可以利用收件人的邮件历史。 # 本地功能,基于redis,无外部调用。 context { enabled = true; level = "user"; # 作用域为每个收件人邮箱的摘要 min_messages = 5; # 开始注入前预热 message_ttl = 1209600; # 14天的邮件摘要 ttl = 2592000; # 30天的redis key有效期 } ``` 这就是拥有一个 Gmail 级别的本地反垃圾邮件引擎所需的一切。收到的邮件将被发送给 LLM 进行评估,对于垃圾邮件,它会返回类似这样的结果: ``` { "probability": 0.85, "reason": "The email uses fear-based marketing tactics, unsolicited commercial content for a product (window cleaning robot), and contains a suspicious international Punycode URL." } ``` 而对于有效邮件: ``` { "probability": 0.1, "reason": "The content appears to be a technical test message regarding DNS resolution with no suspicious links or promotional language." } ``` ### 监控垃圾邮件 Rspamd 还附带一个网页界面,可以显示一些图表和数据,还允许你粘贴邮件并查看它会如何分类该邮件。 默认仪表板及一些统计(https://pictshare.net/nsoi2j.png) 分类吞吐量图表(https://pictshare.net/1z8h4o.png) 扫描/学习页面,你可以放入之前标记过或未标记的邮件,让系统学习正确的分类(https://pictshare.net/k4ea38.png) 测试邮件选择(https://pictshare.net/rch4z2.png) 实际决策历史。你看不到邮件内容或主题,但它会显示 rspamd 是如何得出结论的(https://pictshare.net/90sobi.png) 决策详情视图。注意 GPT_HAM(HAM=好邮件,SPAM=垃圾邮件)会降低垃圾邮件分数,但邮件的其他部分可能会进一步降低分数。默认情况下,如果 rspamd 的分数高于 10,邮件会被标记并且不会投递到你的收件箱;如果分数为 7,邮件会被投递但带有一个垃圾邮件标记(https://pictshare.net/ek2frs.png) ## 我应该使用哪个邮件客户端? 当我从 Google Workspace 迁移到自托管邮件时,我最担心的之一就是用户界面。除了 Gmail,我只知道 Outlook,但除非是公司环境,否则谁也不应该用 Outlook,如果有选择的话。 在我的笔记本电脑和 PC 上,我使用 **Thunderbird**(https://www.thunderbird.net/en-US/thunderbird/all/),这是最强大的开源 Outlook 替代品。它自带所有你需要的功能,甚至还有**适用于 Android 的移动应用**(https://play.google.com/store/apps/details?id=net.thunderbird.android)。搜索功能足够好(足够用了),在过去的三年里我没有遇到任何问题。 如果你更喜欢网页邮件,也有几个选择: - MailFlow(https://mailflow.sh/) - Kurrier(https://github.com/kurrier-org/kurrier) - SnappyMail(https://snappymail.eu/) - Roundcube(https://roundcube.net/) ## 关于维护呢? 如今的邮件服务器解决方案,比如前面提到的 docker-mailserver,在设计时考虑了安全修复,通常具有自动更新功能,不会在生产环境中造成任何问题。但和所有自托管解决方案一样,你掌控一切,但也要对自己的数据负责。 这也意味着你需要考虑备份、恢复、远程访问和更新等问题。如果你至少连备份都没有,那么你可能会丢失所有数据。制定一个好的备份计划,并至少测试一次恢复。 ## 总结 这是可以做到的,效果很好,你的服务器短时间宕机也没关系。如果你关心数据主权,你应该去试一试。 --- 使用 SSH 评论:ssh [email protected] ### 评论 --- ###### 通过邮件获取新文章 (大约一两个月一封邮件,没有垃圾邮件)

相似文章

自建电子邮件持续急剧下降

Hacker News Top

过去十年的DNS测量显示,电子邮件基础设施正围绕两大提供商整合,DMARC实施趋于平稳,且存在庞大的长尾基础设施,引发了对弹性的担忧。

OpenSMTPD 是未来的邮件服务器

Lobsters Hottest

Peter N. M. Hansteen 描述了他转向 OpenSMTPD 的过程,因为 OpenBSD 7.9 放弃了 exim,他认为 OpenSMTPD 是 21 世纪的邮件服务器。

mikeroyal/Self-Hosting-Guide

GitHub Trending (daily)

全面指南,介绍如何在本地自托管软件应用程序,涵盖云服务、LLM、WireGuard、自动化、Home Assistant 和网络。