哈喽呀~ 今天想跟小伙伴们聊一个有点硬核、但又超级实用的话题:自己搭一台邮件服务器。

是不是一听“邮件服务器”就觉得头大?脑子里立马浮现出 Postfix、Dovecot、MySQL、OpenDKIM…… 一堆配置文件堆起来能绕地球半圈,内存没个 2G 都不敢开机>﹏<

但今天要介绍的这位小可爱—— Pmail,真的能把这件事变得“傻瓜式”。它用 Go 写成,整个服务就一个二进制文件,内存占用低到在一台 1 核 1G 的小水管服务器上都能欢快地跑起来。更关键的是:只要把几个 DNS 记录配好,发出的邮件就不会被 Gmail、QQ、网易当成垃圾邮件丢进垃圾桶。

下面咱们就一步一步,把这台属于你自己的邮件服务器,稳稳当当地搭起来~

PMail 项目地址:https://github.com/Jinnrry/PMail/


一、Pmail 凭啥比别的邮件服务器香?

在动手之前,先说说为什么要选它。常见的自建邮件方案大概有这么几类:

方案 特点 槽点
Postfix + Dovecot 手搓 老牌经典,资料多 配置又臭又长,DKIM/SPF 全靠手工,劝退新手
iRedMail 一键脚本,功能全 组件一堆,吃内存,低配机器吃不消
Mailcow Docker 全家桶,界面漂亮 资源占用高,官方建议至少 2G 内存
Pmail 单二进制 + Web 管理,开箱即用 功能相对精简,但日常收发完全够用

Pmail 的核心优势其实就是三个字:轻、简、乖。

  • 轻:纯 Go 编写,编译出来就一个可执行文件,跑在 1 核 1G 甚至更低的机器上毫无压力,特别适合咱们手里那些闲置的小鸡(低配 VPS)。
  • 简:不需要你自己拼装 SMTP、POP3、IMAP 各种组件,一个容器全包了,还自带网页管理后台。
  • 乖:首次启动会引导你完成域名、账号、SSL 证书的配置,连 Let’s Encrypt 证书都帮你自动申请好,不用自己折腾 acme。

一句话总结:如果你想“花最少的时间和资源,拥有一个能正常收发信的私人邮箱”,Pmail 基本就是目前最省心的选择了。💡


二、Docker 一键部署(真的只要一段 yaml)

Pmail 官方提供了打包好的镜像,咱们用 Docker Compose 起一下就好。新建一个 docker-compose.yml,把下面这段乖乖贴进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
services:
pmail:
image: ghcr.io/jinnrry/pmail:latest
container_name: pmail
restart: unless-stopped
ports:
- "25:25"
- "80:80"
- "443:443"
- "110:110"
- "465:465"
- "587:587"
- "995:995"
- "993:993"
volumes:
- ./config:/work/config

稍微解释一下这些端口都在干嘛,免得大家贴完一脸懵:

  • 25:SMTP,服务器之间投递邮件用的“大马路”。
  • 465 / 587:加密的 SMTP 提交端口,你用邮件客户端发信走这里。
  • 110 / 995:POP3 及其加密版本(995),用来把邮件下载到本地。
  • 143 / 993:IMAP 及其加密版本(993),在服务器上同步管理邮件。
  • 80 / 443:Web 管理后台 + 自动申请 SSL 证书时验证域名所有权用。

volumes 那行把宿主机的 ./config 挂进了容器里的 /work/config,这样你的配置、证书、DKIM 密钥都会持久化保存,容器重启也不会丢。✨

保存之后,在同级目录执行:

1
docker compose up -d

看到 pmail 容器状态变成 Up,咱们的第一阶段就搞定啦~ 🎉

小提示:有些云厂商默认是封锁 25 端口的,部署前最好先确认一下 25 端口是否已经解封,不然邮件发不出去可就尴尬了。


三、打开浏览器,完成初始配置

容器起来之后,在浏览器里访问 http://你的服务器IP:80,就能看到 Pmail 的设置向导啦。

跟着向导一步步走,主要会让你填这几样东西:

  1. 服务器域名:比如 mail.yourdomain.com,这个待会儿要写进 DNS 的。
  2. 管理员账号:也就是你的第一个邮箱账号,例如 admin@yourdomain.com。
  3. DNS 解析提示:向导会告诉你该填哪些 DNS 记录(MX、SPF、DKIM 等)
  4. SSL 证书:Pmail 会自动通过 Let’s Encrypt 帮你申请免费的 HTTPS 证书,这一步基本是全自动的,泡杯茶的功夫就好啦。☕

⚠️ 一个很重要的小坑:上面提到的 DNS 解析,如果你用的是 Cloudflare,记得把域名的 代理(小橙云)功能关掉(改成 DNS only,灰色)。Cloudflare 的代理会改掉你的真实 IP,有时候会导致邮件收不到,或者被对方服务器判定异常。咱们搭邮件服务器,DNS 记录最好是“直连”,别走代理哦。


四、把 DNS 记录配齐:MX、SPF、DKIM 一个都不能少

想让发出的邮件不被当垃圾邮件,DNS 才是真正的重头戏。垃圾邮件过滤系统基本就是靠 DNS 里的这几条记录,来判断“这封邮件到底是不是你本人发的”。

1. MX 记录(告诉别人信该投到哪)

类型 名称 内容 TTL
MX @ 或你的域名 mail.yourdomain.com(优先级 10) 自动

2. SPF 记录(授权哪些 IP 能替你发信)

加一条 TXT 记录:

1
2
3
类型:TXT
名称:@
内容:v=spf1 a mx ip4:你的服务器ip ~all

3. DKIM 记录(给邮件盖个防伪章)

DKIM 是用一对公私钥给邮件签名。Pmail 在初始化时会自动生成 DKIM 密钥,并告诉你该往 DNS 里填的公钥 TXT 记录。

不过这里有个真实踩过的坑,悄悄告诉你:🤫

有时候 Pmail 自动生成的 DKIM 会被某些邮件服务商判定为无效别慌,咱们手动换一把钥匙就行。

去项目目录下的 /config/dkim/ 文件夹,用这个在线工具重新生成一对:

👉 https://www.wiredblade.com/zh-CN/NetworkTools/DKIMWizard

重点来了:生成时一定选 1024 位密钥! 别手滑选成 2048哦

生成好后,把私钥覆盖到 /config/dkim/dkim.priv 文件里,同时把工具给的公钥更新到你的 DNS 的 DKIM 记录(通常是 default._domainkey.yourdomain.com 这条 TXT)里。两边保持一致,防伪章就盖好啦。

下面这张图就是 Cloudflare 里 DNS 解析界面的样子
Cloudflare DNS 解析界面


五、找运营商开反向解析(PTR 记录)

这一步很多教程会漏掉,但它对“不被当垃圾邮件”影响非常大。

正向解析是“域名 → IP”,而 PTR 记录是“IP → 域名”的反向解析。大多数邮件服务器收到信后,会反查发信 IP 对应的域名,如果不一致,立马怀疑你是垃圾源。

因为 PTR 记录是作用在 IP 段上的,咱们自己改不了,得去找你的云服务器厂商(阿里云、腾讯云、AWS 等)提工单申请:

工单模板参考:
“您好,请为我的服务器公网 IP 你的IP 设置反向 DNS(PTR)解析,指向域名 mail.yourdomain.com,谢谢~”

一般来说大厂都免费支持,提交后等几个小时到一天就生效了。搞定这一步,你的邮件可信度又往上蹦了一大截。🚀


六、用 mail-tester 验收,8 分以上就稳了

全部配完、并且耐心等 DNS 全球生效(通常几分钟到几小时,看 TTL)之后,就可以验收成果啦。

打开 👉 https://www.mail-tester.com/

网站会给你一个专属测试邮箱地址(形如 tx@mail-tester.com)。用自己的 Pmail 账号,认认真真发一封邮件过去,然后点“检查分数”。

它会从 SPF、DKIM、PTR、黑名单、邮件头格式等维度给你打分,满分是 10 分。

下面这张就是博主实测的评分图:

邮件评分结果

可以看到,满分 10 分这一回拿了 7 分。少了那 3 分其实不是配置错了,而是当时 DNS 还没完全生效(PTR 和 DKIM 的同步需要一点时间)。等记录彻底传播开,分数就能稳稳冲到 8 分以上。

💡 经验值:分数 ≥ 8 分,发出的邮件基本就能被 Gmail、QQ 邮箱、网易等主流服务商正常收下,进垃圾箱的概率非常低。所以别看到 7 分就慌,先去喝口水,等 DNS 生效再测一次就好~


小小总结

回头看看,咱们其实就做了这么几件事:

  1. 用一段 docker-compose 把 Pmail 跑起来;
  2. 访问 IP:80 走完初始化向导,顺手关掉 Cloudflare 代理;
  3. 把 MX / SPF / DKIM 三条 DNS 记录配齐(DKIM 不对就手动换 1024 位密钥);
  4. 找厂商给 IP 加上 PTR 反向解析;
  5. 用 mail-tester 测一测,8 分以上收工。

全程下来,哪怕是一台 1 核 1G 的小水管服务器也能轻松扛住,资源占用低得感人。从此你就有了一个真正属于自己、数据自己掌控、还能正常收发信的私人邮箱,再也不用担心哪天第三方邮箱突然收回你的账号啦。🥰

如果在配置过程中遇到什么奇奇怪怪的小问题,欢迎在评论区留言,咱们一起排雷~ 祝大家的邮件都能乖乖送达,永不进垃圾箱!✉️