导读:本站自托管系列跑了不少服务,哪吒的告警、备份的邮件通知、网站的密码找回——它们都依赖一件事:你的VPS能发出一封不被扔进垃圾箱的邮件。第三方发信服务免费额度越来越抠,这篇把自建发信讲透:邮件信誉的基本盘是什么、25端口先测再搭、Postfix最小可用配置、SPF/DKIM/DMARC三件套各自解决什么问题、PTR反向解析这个最容易被忽略的一环、以及用mail-tester给整套配置打分验收。读完这篇,你的服务器邮件终于能挺直腰杆。
一、先泼冷水:哪些场景适合自建发信
自建发信不是万能药,先判断你的场景合不合适。适合的:告警通知、密码重置、注册验证码这类事务性邮件,量不大(日均几百封以内)、收件人是主动愿意收的用户、发信域名是你自己控制的。不适合的:营销群发、newsletter订阅列表——群发场景对IP信誉要求极高,全新IP冷启动发一万封,进垃圾箱率会让你怀疑人生,这种老老实实用专业发信服务。还有一个前提条件要自查:你的VPS厂商是否放行25端口。很多云厂商(尤其国内和AWS/GCP的默认账号)封禁25端口防垃圾邮件,先测:
telnet smtp.gmail.com 25
连不上就是被封,去工单申请解封或换厂商,别急着装任何东西。这一步五分钟,能省你半天的无用功。
二、邮件信誉的基本盘:三个身份要对得上
一封邮件能不能进收件箱,取决于收件方服务器信不信你。它检查的是三个身份的一致性:邮件声称来自"你的域名",IP地址要能反查回这个域名(PTR),域名要授权这个IP替它发信(SPF),邮件内容要带着域名持有者的签名(DKIM)。三件事全对上,再加DMARC告诉对方"验不过的怎么处理",信誉分才及格。缺任何一环,Gmail可能直接拒收,QQ邮箱扔垃圾箱,Outlook静默丢弃——不同邮箱厂商的严格程度不同,但都会看这套组合。理解了这个框架,后面每一步配置都是在补齐一块拼图,而不是玄学。
三、Postfix最小可用配置
Debian系安装:
apt install postfix
安装时选"Internet Site",系统会问"System mail name",填你的发信域名(比如mail.example.com)。装完核心参数在/etc/postfix/main.cf,自建发信场景关键几行:
myhostname = mail.example.com myorigin = example.com inet_interfaces = loopback-only
重点解释第三行:loopback-only意味着这台Postfix只处理本机应用发出的邮件(PHP的mail函数、命令行mail命令、本站备份篇讲过的告警脚本),不对外开放SMTP端口收外部投递。个人发信服务器99%的场景就该这样——你不收外部邮件,就没必要暴露25端口给全世界的扫描器(SSH篇讲过的最小暴露面原则,这里同样适用)。改完systemctl restart postfix,用命令行发一封测试:
echo "body" | mail -s "test" you@example.com
能收到(哪怕在垃圾箱)说明通道已通,接下来全是信誉修缮的活。
四、SPF:域名授权书的正确写法
SPF是一条TXT记录,声明"谁有权用这个域名发信"。在你的DNS面板(本站DNS篇讲过的记录类型)添加:
example.com. TXT "v=spf1 a mx ip4:203.0.113.10 ~all"
逐段翻译:v=spf1是版本号;a授权域名A记录指向的IP;mx授权MX记录;ip4直接授权你的VPS地址;~all是软失败——没被授权的来源发信标记为可疑但不直接拒收。新配置建议先用~all观察一周,确认自己的应用都走对了路径,再升级成-all硬拒绝。两个常见错误:一是SPF记录的DNS查询次数超过10次上限(嵌套include太多会触发,Gmail直接判PermError),个人场景手动列IP就好,别套娃include;二是同一域名出现两条SPF记录,属于直接违规,宁可合并也不要并存。
五、DKIM:给你的邮件盖章
SPF只验"IP有没有授权",DKIM更进一步:用私钥给邮件正文签名,公钥发布在DNS里,收件方验签确认邮件内容没被篡改、且确实出自域名持有者。工具用opendkim:
apt install opendkim opendkim-tools
生成密钥对:
opendkim-genkey -b 2048 -d example.com -s mail
-d是域名,-s是选择器(selector,用于多套密钥共存)。生成的mail.txt就是要发布的DNS记录(一条TXT,记录名为mail._domainkey.example.com),mail.private是私钥,权限收紧只给opendkim读。然后配置Postfix把邮件交给opendkim签名(milter协议对接,localhost回环通信),重启两个服务。DKIM的2048位密钥是当下主流,1024位虽然还能用但部分厂商已经开始嫌弃。验签失败的邮件几乎必进垃圾箱,所以配置完第六节要立刻验证签名是否生效。
六、DMARC:定规矩收报告
DMARC是站在SPF和DKIM之上的策略层,TXT记录发布在_dmarc.example.com:
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
p参数是核心动作:none(只观察不干预)、quarantine(验不过进垃圾箱)、reject(验不过直接拒收)。新域名从p=none起步,靠rua邮箱收聚合报告——Google、微软会每天给你发一份XML,告诉你"以你域名发出的邮件有多少、多少通过了验证、哪些IP在冒充你"。观察两周,验证全绿,再逐步升级到quarantine和reject。rua报告还有个隐藏价值:如果你域名被人伪造发钓鱼邮件,报告里会现形,配合SPF的-all就能压制。DMARC有个对齐(alignment)细节:From头部的域名必须和SPF/DKIM验证的域名一致,个人场景域名统一就天然满足,不用额外折腾。
七、PTR反向解析:最容易漏的一环
前面都在你的DNS面板里操作,PTR这条偏偏不在——它在给你VPS的IP所属厂商的面板里。反向解析是把IP解析回域名:收件方服务器拿到203.0.113.10,反查得到的应该是mail.example.com,而不是厂商默认的某种编号主机名。配置入口各家不同:Vultr、Linode、Hetzner都在控制台直接可设,国内厂商一般在工单或备案系统里。PTR、EHLO主机名、邮件From域名,三者保持一致是黄金法则——不一致是垃圾邮件过滤器最敏感的信号之一,因为正经邮件服务商一定是对的,对不上的多半是临时搭的发信脚本。这个配置免费、五分钟、收益极大,性价比全篇第一。
八、验收打分:mail-tester说了算
配置完不测等于没配。打开mail-tester.com,它会给你一个一次性收件地址,从你的VPS发一封过去:
echo "test from my vps" | mail -s "mail tester" test-xxxx@srv1.mail-tester.com
几秒后刷新页面,拿到0到10的评分和逐项清单:SPF通过没有、DKIM签名有效没有、DMARC策略识别没有、PTR对不对、内容有没有触发垃圾词。10分满分,9分以上进收件箱基本稳了。低于7分按清单逐项修,每一项都对应前面某一节。除了mail-tester,再给Gmail和QQ邮箱各发一封实测(这两家覆盖了国内站长的大多数收件人),Gmail里点"显示原始邮件"能看到完整的验证链路(spf pass、dkim pass、dmarc pass),这是最权威的自检报告。验收通过后把这套测试邮件的发送命令存个脚本,以后每次迁移服务器或改配置,跑一遍就知道有没有弄坏什么。
结语
自建发信的全部秘密就是"把身份三件套配齐":SPF声明授权、DKIM盖章签名、DMARC定规矩,加上PTR对齐,四件事凑齐,事务性邮件的送达率不输任何付费服务。整个流程第一次做要半天,其中大半时间在等DNS生效;做熟了就是一小时的事。配上备份篇的告警邮件、监控篇的通知渠道,你的自托管体系从此闭环——服务器有事,第一时间以你自己的域名、堂堂正正地发邮件告诉你。


