前言:一个闲置 VPS 的华丽转身
还记得文章开头说的吗?我有台 OVH 的小鸡(1核2GB),博客搬走后就闲置了。看着它在后台面板里吃灰,我总觉得可惜。
思来想去,能干点啥呢?搭个邮局吧!
起初只是想给自己弄个域名邮箱,比如 admin@tbbbk.com,看起来专业又有牌面。但搭建完成后,我发现邮件服务太闲了——一天也就收发几封邮件,服务器资源完全浪费。
于是,一个大胆的想法冒了出来:做个临时邮箱网站,给网友提供免费服务!
就这样,M2U.io 诞生了。从零到现在,日处理邮件上万封,稳定运行快半年,零宕机。
今天这篇文章,我会把整个邮件服务搭建过程、踩过的坑、DNS 配置技巧、防垃圾邮件经验,毫无保留地分享给你。
一、为什么选择自建邮局?
付费企业邮箱 vs 自建邮局
| 对比项 | 付费企业邮箱(腾讯、阿里等) | 自建邮局(HestiaCP) |
|---|---|---|
| 费用 | ¥500-2000/年(5-10 个邮箱) | VPS 费用(¥20-50/月) |
| 邮箱数量 | 限制 | 无限!想建多少建多少 |
| 数据隐私 | 存在服务商服务器 | 完全属于自己 |
| 配置自由度 | 被限制 | 想怎么玩怎么玩 |
| 学习价值 | 零 | 深入理解邮件系统 |
| 稳定性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐(配置好也很稳) |
| 技术门槛 | 零 | 中等(但有 HestiaCP 简单很多) |
我为什么自建邮局?
- 省钱:我本来就有 VPS,不用额外花钱买企业邮箱
- 无限邮箱:M2U 项目需要大量临时邮箱,付费邮箱根本做不到
- 数据自主:所有邮件数据在自己服务器,不用担心隐私泄露
- 折腾乐趣:学到了 DNS、SMTP、IMAP 等知识,成就感爆棚
- 装X利器:
admin@tbbbk.com,多有范儿 😎
你适合自建邮局吗?
✅ 适合自建:
- 有自己的域名和 VPS
- 需要多个邮箱(超过 10 个)
- 对数据隐私敏感
- 想深入学习邮件系统
- 预算有限,不想买企业邮箱
❌ 不适合自建:
- 完全零基础,连 SSH 都不会
- 只需要 1-2 个邮箱
- 对稳定性要求极高(企业邮箱确实更稳)
- 懒得维护(邮件服务需要定期检查)
二、开始前的准备:这些东西必须有
硬件要求
| 配置项 | 最低要求 | 推荐配置 | 我的配置(M2U) |
|---|---|---|---|
| CPU | 1核 | 2核 | 1核(OVH) |
| 内存 | 2GB | 4GB | 2GB |
| 硬盘 | 20GB | 40GB SSD | 20GB SSD |
| 带宽 | 不限流量 | 不限流量 | 不限流量(OVH) |
⚠️ 注意:邮件服务比较吃内存,特别是开启 ClamAV(病毒扫描)和 SpamAssassin(垃圾邮件过滤)后。如果内存只有 1GB,建议关闭这两个组件。
最关键的:25 端口必须开放!
这是重中之重!很多 VPS 服务商默认封禁 25 端口(发邮件的端口),导致你建好邮局也发不出邮件。
如何检查 25 端口是否开放?
# 方法一:用 telnet 测试
telnet smtp.qq.com 25
# 如果能连接,说明 25 端口是开的
# 方法二:用 nc 测试
nc -zv smtp.qq.com 25各大 VPS 服务商 25 端口政策:
| 服务商 | 25 端口默认状态 | 如何开放 |
|---|---|---|
| OVH | ✅ 默认开放 | 无需操作 |
| Vultr | ✅ 默认开放 | 无需操作 |
| DigitalOcean | ❌ 默认封禁 | 提交工单申请(可能被拒) |
| 阿里云/腾讯云 | ❌ 默认封禁 | 提交工单申请(需要企业认证) |
| 甲骨文云 | ❌ 默认封禁 | 无法开放!不要用! |
| AWS/GCP | ❌ 默认封禁 | 提交申请,审核较难 |
| Hetzner | ✅ 默认开放 | 无需操作 |
我的经验:OVH 是最适合建邮局的,25 端口默认开放,IP 质量也不错(不在垃圾邮件黑名单里)。
域名要求
- ✅ 必须有自己的域名(
.com.net.org等都行) - ✅ 能够修改域名的 DNS 记录(A、MX、TXT 等)
- ❌ 不建议用免费域名(如
.tk.ml),容易被邮件服务商拉黑
反向 DNS(rDNS):极其重要!
这是很多人忽略的一点,但这是防止邮件进垃圾箱的关键。
什么是反向 DNS?
正常 DNS:mail.tbbbk.com → 123.45.67.89(域名解析到 IP)
反向 DNS:123.45.67.89 → mail.tbbbk.com(IP 反查到域名)
邮件服务器收信时,会检查你的 IP 的反向 DNS 是否和你发信的域名一致。如果不一致,很可能被判定为垃圾邮件。
如何设置反向 DNS?
这个需要在 VPS 服务商后台设置(不是域名商!):
- OVH:进入 VPS 管理页面,找到"Reverse DNS",填入
mail.你的域名.com - Vultr:Settings → IPv4 → Reverse DNS
- Hetzner:Cloud Console → Server → Networking → Reverse DNS
如何检查反向 DNS 是否生效?
# Linux/Mac
dig -x 你的服务器IP
# Windows PowerShell
nslookup 你的服务器IP应该返回 mail.你的域名.com(或者你设置的主机名)。
三、在 HestiaCP 中添加邮件域名
好了,准备工作做完,开始实战!
步骤一:添加邮件域名
- 登录 HestiaCP
- 点击左侧菜单 MAIL
- 点击右上角绿色按钮 Add Mail Domain
- 填写域名(比如
m2u.io) - 点击 Save
就这么简单!HestiaCP 会自动:
- 配置 Exim(SMTP 服务器)
- 配置 Dovecot(IMAP/POP3 服务器)
- 生成必要的 DNS 记录
步骤二:查看需要添加的 DNS 记录
保存后,点击域名右边的 📖 图标(看起来像个小书),会显示需要添加的所有 DNS 记录。
典型的 DNS 记录清单:
# MX 记录(邮件服务器地址)
@ MX 10 mail.m2u.io.
# A 记录(mail 子域名指向服务器)
mail A 你的服务器IP
# TXT 记录(SPF,防止邮件被伪造)
@ TXT "v=spf1 a mx ip4:你的服务器IP ~all"
# TXT 记录(DKIM,邮件签名)
mail._domainkey TXT "v=DKIM1; k=rsa; p=一长串公钥..."
# TXT 记录(DMARC,邮件策略)
_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@m2u.io"重要:把这些记录复制下来,到域名商后台添加。
步骤三:在域名商后台添加 DNS 记录
我用的是 Cloudflare(免费),操作如下:
- 登录 Cloudflare,选择你的域名
- 点击 DNS
- 逐条添加 HestiaCP 给出的记录
注意事项:
- MX 记录的优先级填
10 - TXT 记录要用英文双引号包起来
- DKIM 的公钥很长,Cloudflare 可能会自动换行,检查一下是否完整
步骤四:等待 DNS 生效
通常 5-30 分钟,最长 24 小时。
如何检查 DNS 是否生效?
# 检查 MX 记录
dig MX m2u.io
# 检查 SPF 记录
dig TXT m2u.io
# 检查 DKIM 记录
dig TXT mail._domainkey.m2u.io四、创建邮箱账户
DNS 配置好后,就可以创建邮箱了!
创建第一个邮箱
- 点击 MAIL,找到你的域名
- 点击域名进入管理页面
- 点击 Add Mail Account
填写信息:
- Account:邮箱前缀(比如
admin) - Password:邮箱密码(用强密码!)
- Quota:邮箱容量(MB),0 表示无限
- Account:邮箱前缀(比如
- 点击 Save
完成!你的第一个邮箱 admin@m2u.io 诞生了 🎉
批量创建邮箱(适合临时邮箱项目)
对于 M2U 这样的临时邮箱项目,我需要快速创建大量邮箱。手动一个个创建太慢,可以用命令行:
# 创建单个邮箱
/usr/local/hestia/bin/v-add-mail-account 用户名 域名 邮箱前缀 密码
# 示例
/usr/local/hestia/bin/v-add-mail-account admin m2u.io test001 随机密码我的批量创建脚本(自动生成 100 个临时邮箱):
#!/bin/bash
DOMAIN="m2u.io"
USER="admin"
for i in {1..100}; do
MAILBOX="temp$(printf '%03d' $i)" # temp001, temp002, ...
PASSWORD=$(openssl rand -base64 12) # 随机密码
/usr/local/hestia/bin/v-add-mail-account $USER $DOMAIN $MAILBOX $PASSWORD
echo "$MAILBOX@$DOMAIN | 密码: $PASSWORD" >> mailboxes.txt
done
echo "创建完成!邮箱列表已保存到 mailboxes.txt"五、配置邮件客户端:让邮箱可以收发
网页版邮箱(Roundcube)
HestiaCP 自带 Roundcube 网页邮箱,开箱即用!
访问地址:https://webmail.你的域名.com
比如我的是:https://webmail.m2u.io
登录信息:
- 用户名:完整邮箱地址(如
admin@m2u.io) - 密码:创建邮箱时设置的密码
登录后,就可以像用 Gmail 一样收发邮件了。界面虽然朴素,但功能齐全。
桌面客户端(Outlook、Thunderbird、Apple Mail)
如果你习惯用桌面客户端,配置信息如下:
接收邮件(IMAP):
- 服务器:
mail.你的域名.com - 端口:
993 - 加密方式:
SSL/TLS - 用户名:完整邮箱地址
- 密码:邮箱密码
发送邮件(SMTP):
- 服务器:
mail.你的域名.com - 端口:
465(SSL)或587(STARTTLS) - 加密方式:
SSL/TLS - 用户名:完整邮箱地址
- 密码:邮箱密码
我的推荐客户端:
- Windows:Thunderbird(免费开源)
- Mac:Apple Mail(自带,好用)
- Linux:Thunderbird 或 Evolution
- 手机:系统自带的邮件 APP 就够用
手机 APP 配置
iOS(iPhone/iPad):
- 设置 → 邮件 → 账户 → 添加账户 → 其他
- 选择"添加邮件账户"
- 填写邮箱地址和密码
- 系统会自动检测服务器设置(如果自动检测失败,手动填上面的 IMAP 和 SMTP 信息)
Android:
- 打开"Gmail"APP(或其他邮件 APP)
- 添加账户 → 其他
- 填写邮箱地址和密码
- 选择"IMAP"
- 手动填入服务器信息
六、重头戏:SPF、DKIM、DMARC 配置
这三个是防止邮件进垃圾箱的核心技术。我刚开始没配置这些,发出去的邮件 90% 进垃圾箱。配置完后,送达率提升到 95% 以上。
SPF:告诉收件方"我授权这台服务器发邮件"
SPF 是什么?
Sender Policy Framework(发件人策略框架),用来防止别人伪造你的域名发垃圾邮件。
SPF 记录示例:
# 类型 名称 值
TXT @ v=spf1 a mx ip4:你的服务器IP ~all参数解释:
v=spf1:SPF 版本a:允许域名的 A 记录对应的 IP 发信mx:允许域名的 MX 记录对应的服务器发信ip4:你的IP:明确允许这个 IP 发信~all:其他 IP 发信标记为"可疑"(-all是直接拒绝,太严格)
如何检查 SPF 是否生效?
访问 https://mxtoolbox.com/spf.aspx,输入你的域名,看结果。
DKIM:给邮件加上"数字签名"
DKIM 是什么?
DomainKeys Identified Mail(域名密钥识别邮件),通过公钥加密技术验证邮件确实是你发的。
好消息:HestiaCP 自动生成 DKIM 密钥和 DNS 记录,你只需要复制粘贴!
DKIM 记录示例:
# 类型 名称 值
TXT mail._domainkey v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3...一长串公钥这个记录在 HestiaCP 的"DNS 记录清单"里能看到,复制到域名商后台就行。
如何检查 DKIM 是否生效?
访问 https://mxtoolbox.com/dkim.aspx,输入 mail._domainkey.你的域名.com,看结果。
DMARC:制定邮件验证失败的处理策略
DMARC 是什么?
Domain-based Message Authentication, Reporting & Conformance(基于域名的消息认证、报告和一致性)。它告诉收件方:"如果邮件验证失败,请这样处理。"
DMARC 记录示例:
# 类型 名称 值
TXT _dmarc v=DMARC1; p=quarantine; rua=mailto:dmarc@m2u.io; pct=100参数解释:
v=DMARC1:DMARC 版本p=quarantine:验证失败的邮件放进垃圾箱(none不处理,reject直接拒收)rua=mailto:dmarc@m2u.io:发送验证报告到这个邮箱pct=100:100% 的邮件应用这个策略
我的建议:
- 刚开始用
p=none,观察一段时间 - 确认邮件都能正常收发后,改成
p=quarantine - 绝对有把握后,才用
p=reject
我的 M2U 配置实例
这是我实际使用的 DNS 配置:
# MX 记录
m2u.io. MX 10 mail.m2u.io.
# A 记录
mail.m2u.io. A 你的IP
# SPF 记录
m2u.io. TXT "v=spf1 mx a ip4:你的IP ~all"
# DKIM 记录
mail._domainkey.m2u.io. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSq...很长的公钥"
# DMARC 记录
_dmarc.m2u.io. TXT "v=DMARC1; p=quarantine; rua=mailto:admin@m2u.io; pct=100"配置完这些,我的临时邮箱发出去的邮件,送达率从 40% 提升到 95% 以上!
七、测试邮件收发
配置完所有 DNS 记录后,一定要测试!
测试一:发送邮件
- 登录 Roundcube(
https://webmail.你的域名.com) - 写一封邮件,发给你的 Gmail、QQ 邮箱等
- 检查是否收到,是否进垃圾箱
测试二:接收邮件
- 用你的 Gmail 给自己的新邮箱发一封测试邮件
- 登录 Roundcube,看是否收到
测试三:邮件评分(重要!)
访问 https://www.mail-tester.com/,它会给你一个临时邮箱地址。
- 用你的新邮箱给这个地址发一封测试邮件
- 回到网站,点击"Then check your score"
- 查看评分(满分 10 分)
评分说明:
- 10/10:完美!邮件不会进垃圾箱
- 8-9/10:不错,大部分能送达
- 6-7/10:一般,可能进垃圾箱
- < 6/10:有问题,赶紧排查
我的M2U 评分:9.5/10(扣了 0.5 分是因为 IP 是新的,还没建立"信誉")
常见扣分原因和解决办法
❌ SPF 记录有问题
解决:检查 SPF 记录是否正确添加,IP 地址是否对
❌ 没有 DKIM 签名
解决:确认 DKIM 记录已添加,并且 Exim 已启用 DKIM
❌ 没有反向 DNS
解决:在 VPS 服务商后台设置 rDNS
❌ IP 在黑名单
解决:访问 https://mxtoolbox.com/blacklists.aspx 检查,如果在黑名单,申请移除
❌ 发送速率过快
解决:限制发信频率,避免短时间发大量邮件
八、高级功能:Catch-All 和邮箱别名
Catch-All:万能邮箱
这是我做 M2U 临时邮箱的核心功能!
Catch-All 是什么?
开启后,所有发给 任何前缀@你的域名.com 的邮件,都会被某个邮箱接收。
比如:
- 开启 Catch-All,指向
admin@m2u.io - 别人发邮件给
abc123@m2u.io(这个邮箱不存在) - 邮件会自动到
admin@m2u.io的收件箱
如何开启 Catch-All?
- 点击 MAIL,找到你的域名
- 点击域名进入管理页面
- 找到 Catch-All 设置
- 选择一个现有邮箱(比如
admin@m2u.io) - 点击 Save
我的应用场景:
M2U 临时邮箱网站,用户可以随便输入一个邮箱前缀(如 test123@m2u.io),不用提前创建,直接就能收信!这就是 Catch-All 的威力。
邮箱别名:一个邮箱多个地址
别名是什么?
一个邮箱可以有多个邮件地址,发给任何别名的邮件都会进同一个收件箱。
如何添加别名?
- 点击 MAIL,找到邮箱,点击编辑
在 Aliases 字段填入别名(多个用逗号分隔)
- 比如:
support, help, contact
- 比如:
- 点击 Save
现在,发给 support@m2u.io、help@m2u.io、contact@m2u.io 的邮件,都会到 admin@m2u.io 的收件箱。
九、防垃圾邮件:SpamAssassin 和 ClamAV
SpamAssassin:垃圾邮件过滤器
如果你的邮箱是对外公开的(比如放在网站上),很快就会收到大量垃圾邮件。
HestiaCP 自带 SpamAssassin,自动过滤垃圾邮件。
如何查看垃圾邮件?
登录 Roundcube,左侧有个 Junk 文件夹,SpamAssassin 判定为垃圾邮件的都会自动放进去。
如何调整垃圾邮件过滤强度?
# 编辑配置文件
sudo nano /etc/spamassassin/local.cf
# 找到这一行
required_score 5.0
# 数字越小,过滤越严格(可能误判)
# 数字越大,过滤越宽松(可能漏掉垃圾邮件)
# 默认 5.0 比较合适ClamAV:病毒扫描
ClamAV 会扫描邮件附件,防止病毒传播。
注意:ClamAV 很吃内存(300-500MB),如果服务器内存不足,可以关闭:
sudo systemctl stop clamav-daemon
sudo systemctl disable clamav-daemon十、我的 M2U 临时邮箱运营数据
运行快一年了,分享一下数据:
| 指标 | 数据 |
|---|---|
| 每日处理邮件 | 5000-15000 封 |
| 邮箱数量 | 4 个域名,Catch-All 全开 |
| 服务器资源占用 | CPU 10-20%,内存 1.2GB/2GB |
| 宕机次数 | 0 次! |
| 垃圾邮件拦截率 | 99% |
| 用户反馈 | "稳定"、"好用"、"比 Temp-Mail 快" |
一些有趣的发现:
- 白天 10-12 点流量最高(上班族在注册账号)
- 周末流量下降 30%
- 最受欢迎的域名后缀:
.io>.com>.net
十一、常见问题排查
Q1:邮件发不出去
可能原因:
- 25 端口被封禁
- DNS 记录没配置
- 防火墙阻止了 25 端口
排查步骤:
# 检查 25 端口
telnet smtp.qq.com 25
# 检查 Exim 是否运行
sudo systemctl status exim4
# 查看 Exim 日志
sudo tail -f /var/log/exim4/mainlogQ2:邮件能发出去,但进垃圾箱
可能原因:
- SPF/DKIM/DMARC 没配置或配置错误
- 没有反向 DNS
- IP 在黑名单
- 邮件内容像垃圾邮件(全是链接、大写字母等)
解决办法:
- 用 https://www.mail-tester.com/ 测试,看哪里扣分
- 用 https://mxtoolbox.com/ 检查 SPF、DKIM、DMARC
- 检查 IP 是否在黑名单
Q3:收不到邮件
可能原因:
- MX 记录没配置
- Dovecot 没启动
- 邮箱容量满了
排查步骤:
# 检查 MX 记录
dig MX m2u.io
# 检查 Dovecot 是否运行
sudo systemctl status dovecot
# 查看邮箱容量
du -sh /home/admin/mail/m2u.io/adminQ4:服务器 CPU 100%
可能原因:
- 被人用来发垃圾邮件(邮箱密码泄露)
- 短时间收到大量邮件
- ClamAV 扫描占用过高
解决办法:
# 查看是谁在发邮件
sudo exim -bp | exiqsumm
# 如果队列里有大量邮件,清空队列
sudo exim -bp | awk '/^ *[0-9]+[mhd]/{print "sudo exim -Mrm " $3}' | bash
# 关闭 ClamAV(如果不需要)
sudo systemctl stop clamav-daemon十二、安全建议
- 邮箱密码一定要强:至少 16 位随机密码
- 定期查看日志:
/var/log/exim4/mainlog - 限制发信频率:防止被人滥用发垃圾邮件
- 开启 SPF、DKIM、DMARC:提高送达率,防止被伪造
- 监控服务器资源:邮件队列突然暴增,可能被攻击
十三、总结
自建邮局看起来复杂,但有了 HestiaCP,真的简单太多了。
从添加域名、配置 DNS、创建邮箱,到测试收发,全程只需要 30 分钟。剩下的就是慢慢调优,让送达率越来越高。
我的 M2U 临时邮箱项目,从 0 到日处理上万封邮件,稳定运行快一年,证明了 HestiaCP 邮件服务的可靠性。
如果你也想建自己的邮件服务器,不妨试试 HestiaCP。它会让你发现,原来自建邮局没那么难。
📚 HestiaCP 完整系列教程
本文是 HestiaCP 实战系列 的第 4 篇(完结篇),完整系列包括:
- 折腾 HestiaCP:从零到拥有自己的服务器面板
- HestiaCP 安全血泪史:保护服务器的实战经验
- HestiaCP 建站实战:从买域名到网站上线
- 👉 HestiaCP 自建邮局:从 M2U 临时邮箱的诞生说起(本文)
我的临时邮箱项目:https://m2u.io
有问题? 欢迎在评论区留言,我会尽量回复。如果这篇文章帮到了你,欢迎分享!