SPF record uses deprecated ptr: mechanism
The domain's SPF record contains the `ptr` mechanism, which RFC 7208 explicitly deprecates and instructs publishers not to use.
The ptr mechanism forces every receiving mail server to perform a reverse DNS lookup on the connecting IP, then a forward lookup on each returned name, before deciding whether to accept the message. This is slow, often fails under load, and some receivers (including Google) treat ptr-based matches as unreliable or ignore them entirely — meaning mail that should pass SPF can be marked softfail or permerror. The record still functions today, but it drags down evaluation time and will eventually be rejected outright as more operators follow the RFC.
What causes it
- Legacy SPF record copied from an old vendor template or tutorial written before RFC 7208 (2014) formalized the deprecation.
- Historical setup for a mail server whose outbound IP had matching forward and reverse DNS, used as a shortcut instead of listing
a,mx, orip4ranges. - Hosted control panels (older cPanel/Plesk versions) that auto-generated SPF records including
ptrfor the server hostname. - An administrator unsure which IPs the mail infrastructure uses and relying on
ptrto cover any host under the domain's PTR namespace. - Record never audited after migrating to a cloud mail provider (Google Workspace, Microsoft 365, SendGrid) that publishes proper
include:mechanisms.
How to fix it
Identify the IPs or hostnames the `ptr` mechanism was meant to authorize
Pull the current SPF record and figure out what the ptr is actually covering. If it was meant to authorize the domain's own mail server, you need its outbound IPs; if it was covering a vendor, you need their include.
dig +short TXT example.com | grep spf Replace `ptr` with `ip4:` / `ip6:`, `a`, `mx`, or an `include:`
Rewrite the record using mechanisms that resolve deterministically. Use ip4:/ip6: for static outbound IPs, mx if your MX hosts also send mail, or an include: for a managed provider. Keep the record under the 10 DNS-lookup limit.
v=spf1 ip4:192.0.2.10 ip4:192.0.2.11 include:_spf.google.com ~all Publish the updated TXT record and verify evaluation
Update the record at your DNS provider, wait for the TTL to expire, then confirm resolvers see the new record and that it still passes for your sending sources.
dig +short TXT example.com @1.1.1.1 Send a test message and confirm `spf=pass` with no `ptr` lookups
Send to a mailbox you control (Gmail works well) and inspect the Authentication-Results header. You should see spf=pass with the mechanism that matched (e.g. ip4 or include), and no reference to ptr. Re-run your deliverability check once the TTL has fully propagated.
Fixed it? Run a fresh test to confirm.
Test my inbox →