在VPS上搭建邮件服务器时,SPF记录是决定邮件能否顺利送达收件箱的第一道关卡,配置错误的SPF会导致邮件被标记为垃圾邮件或直接拒收。
很多站长在折腾完Postfix或Dovecot后,发现发出的邮件要么进垃圾箱,要么石沉大海,90%的原因都出在DNS解析配置上,SPF(Sender Policy Framework)本质上是一张白名单,它告诉互联网:“我是谁,以及我允许哪些服务器代表我发送邮件”,对于使用VPS自建邮件服务的用户来说,理解并正确配置SPF,比安装任何复杂的反垃圾软件都重要。
为什么你的VPS邮件会被拦截?SPF的核心逻辑
当你的邮件到达Gmail、Outlook或QQ邮箱时,对方的服务器会先检查你的域名是否有SPF记录,如果没有,或者记录里没包含你VPS的IP地址,对方就会认为这封邮件可能是伪造的,从而采取拦截措施。
业内专家指出,随着反垃圾邮件技术的升级,各大邮箱服务商对SPF的校验越来越严格,以前可能只是警告,现在直接拒收的情况越来越多,SPF不再是“可选配置”,而是“必选配置”。
SPF记录长什么样?
在DNS服务商的控制面板中,你需要添加一条类型为TXT的记录,其标准格式如下:
- 主机记录:通常填 ,代表主域名。
- 记录值:以
v=spf1开头,后面跟着具体的授权规则。
v=spf1 ip4:192.0.2.1 -all
这里面的 -all 非常关键,它表示“只允许上述IP发送邮件,其他一律拒绝”,如果你填的是 ~all 或 +all,安全性会大打折扣。
VPS搭建邮件服务器SPF配置实操指南
配置SPF看似简单,但细节决定成败,很多新手容易犯的错误是添加多条SPF记录,或者忽略了云服务商的特殊要求。
第一步:确认你的VPS出口IP
在配置之前,你必须知道你的邮件服务器使用的公网IP地址,对于大多数VPS用户,这通常就是VPS的主IP。
- 登录你的VPS管理后台。
- 找到“网络”或“配置”页面,查看IPv4地址。
- 在本地终端输入
curl ifconfig.me再次确认,确保内外网IP一致(部分云服务商有NAT转换,需特别注意)。

第二步:编写SPF记录字符串
这是最容易出错的地方,SPF记录有长度限制,总字符数不能超过 255个字符,如果超过,DNS解析会失败,导致邮件发送中断。
假设你的域名是 example.com,VPS IP是 2.3.4,你的SPF记录值应该是:
v=spf1 ip4:1.2.3.4 -all
注意:如果你同时使用第三方服务(如SendGrid、Amazon SES)发送邮件,需要将它们的机制也加入SPF中。
v=spf1 ip4:1.2.3.4 include:spf.protection.outlook.com -all
第三步:在DNS服务商处添加记录
不同DNS服务商的操作界面不同,但逻辑一致:
- 阿里云/腾讯云:进入域名解析控制台,点击“添加记录”,类型选
TXT,主机记录填,记录值填入上述字符串,TTL设为默认即可。 - Cloudflare:添加
TXT记录,Name填,Content填字符串。 - GoDaddy:在DNS Management中添加
TXT记录。
添加后,等待DNS生效,通常几分钟到几小时不等,你可以使用 nslookup -type=TXT example.com 命令在本地测试是否生效。
常见SPF配置误区与避坑指南
即使配置了SPF,邮件依然可能被拒收,这通常是因为配置方式存在隐患,以下是几个高频踩坑点。
添加多条SPF记录
这是最常见的错误,DNS规范明确规定,一个域名只能有一条有效的SPF记录,如果你添加了多条,DNS解析器通常会忽略第一条之后的所有记录,或者返回错误,导致校验失败。
- 错误示范:
- 记录1:
v=spf1 ip4:1.2.3.4 -all - 记录2:
v=spf1 include:spf.example.com -all
- 记录1:
- 正确做法:将所有授权合并到一条记录中。

忽略云服务商的限制
部分云服务商(如AWS、阿里云)对自建邮件服务器有严格的风控策略,如果你直接使用VPS IP发送邮件,即使SPF配置正确,也可能因为IP信誉度低而被拦截。
行业共识认为,对于高并发或商业邮件,建议使用专门的邮件中继服务(Mail Relay),你的SPF记录需要包含中继服务的域名,而不是VPS的IP。
v=spf1 include:relay.example.com -all
SPF记录过长导致截断
当你的域名关联了多个第三方服务(如Office 365、Google Workspace、Zoho等)时,SPF记录可能迅速超过255字符限制。
- 解决方案:使用
include机制,不要直接列出所有IP,而是引用服务商提供的SPF域名。 - 进阶方案:如果依然超长,考虑使用SPF Flattening技术,但这需要较高的DNS配置能力,普通用户建议精简使用的第三方服务。
SPF与其他邮件认证协议的关系
SPF只是邮件安全的“三驾马车”之一,仅配置SPF是不够的,还需要配合DKIM和DMARC,才能构建完整的邮件信任体系。
SPF vs DKIM:有什么区别?
- SPF:验证“发送者IP是否合法”,它检查的是邮件服务器IP是否在域名的白名单中,缺点是,如果邮件经过转发(如通过Gmail转发),SPF可能会失效,因为转发服务器的IP不在你的白名单里。
- DKIM:验证“邮件内容是否被篡改”,它通过数字签名确保邮件在传输过程中没有被修改,DKIM不受转发影响,因为签名是随邮件内容生成的。
为什么必须配置DMARC?
DMARC(Domain-based Message Authentication, Reporting & Conformance)是建立在SPF和DKIM之上的策略协议,它告诉收件方:如果SPF或DKIM验证失败,该怎么办?
- none:不采取任何行动,仅发送报告。
- quarantine:将邮件标记为垃圾邮件。
- reject:直接拒收邮件。

对于自建邮件服务器,建议逐步将DMARC策略从 none 调整为 quarantine,最后到 reject,这能显著提升你的域名信誉,减少被钓鱼攻击的风险。
如何验证SPF配置是否成功?
配置完成后,不要只依赖主观感觉,要用工具验证。
- 在线工具:使用 MXToolbox 或 SenderScore 等网站,输入你的域名,查看SPF记录是否被正确解析,以及是否有语法错误。
- 发送测试邮件:向 Gmail、Outlook、QQ邮箱各发送一封测试邮件。
- 查看邮件头(Email Headers)。
- 在Gmail中,点击邮件右侧的“显示原始邮件”,查找
Authentication-Results字段。 - 如果看到
spf=pass,说明SPF配置成功,如果看到spf=fail或spf=softfail,则需要重新检查DNS记录。
Q&A:VPS搭建邮件服务器SPF配置常见问题
VPS搭建邮件服务器SPF配置失败怎么办?
首先检查DNS记录是否已生效,使用 dig txt example.com 命令查看返回结果,如果返回为空或错误,可能是DNS缓存问题,等待几小时或强制刷新DNS,检查SPF记录是否超过255字符,确认主机记录是否正确,主域名通常填 ,子域名如 mail.example.com 则填 mail。
SPF记录可以包含多个IP吗?
可以,在 ip4: 或 ip6: 机制中,可以列出多个IP地址。v=spf1 ip4:1.2.3.4 ip4:5.6.7.8 -all,但要注意,每个IP地址占用一定字符数,需确保总长度不超过255字符,如果IP较多,建议使用 include 机制引用其他域名的SPF记录。
SPF配置后邮件依然进垃圾箱,原因是什么?
SPF只是邮件认证的一部分,邮件进垃圾箱还可能因为:IP地址被列入黑名单(RBL)、DKIM或DMARC配置缺失、邮件内容包含敏感关键词、或者收件方服务器对自建邮件服务器的默认信任度较低,建议同时配置DKIM和DMARC,并定期监控IP信誉度。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/393018.html
