Blog article
Production-ready SPF overview:
v=spf1 -all remain open to spoofing.If your SPF configuration passes a generic online checker, but your marketing emails still land in Spam, or your DMARC reports show authentication failures, you’re likely seeing an invisible configuration gap.
The SPF entry looks valid. The syntax is clean. And yet, somewhere between your DNS zone and the receiving server, authentication is failing silently.
That gap, between a technically correct SPF entry and a production-ready SPF record, is where most enterprise deployments fall short. This post breaks down that gap, walking through the specific failure modes that separate a working SPF entry from an audit-ready one.
An SPF entry that passes a syntax check tells you one thing: The record is parseable. It tells you nothing about whether every authorized sender is included, whether the record will stay within the 10-lookup limit, or whether there’s documented evidence that any specific IP or include mechanism was intentionally added.
Answering those questions with documented evidence, not assumptions, is what makes a production-ready SPF configuration.
For a CISO or Risk Officer presenting to a board or audit committee, that distinction matters. Deliverability failures caused by an SPF misconfiguration can surface as customer complaints or lost revenue from blocked transactional emails. A separate risk comes from an overly permissive policy: Domain spoofing events that go uncaught because the policy isn’t strict enough.
Both trace back to the same root cause: A record built to pass a checker, not a production-ready SPF configuration.
Production-ready SPF isn’t just an include chain with a -all mechanism at the end. It reflects decisions, deliberate, documented, and revisable, about every source authorized to send on behalf of a domain.
Here is an example that’s closer to what production-ready SPF configurations actually look like:
| Host | Type | Value |
|---|---|---|
@ | TXT | v=spf1 ip4:203.0.113.10 ip4:198.51.100.25/28 include:mail.crm.example.com include:send.marketingplatform.example.com include:thirdparty-transactional.example.com ~all |
How to read this record:
ip4:203.0.113.10: A single explicit IP for an on-premises relay. This should map to a known, named server.ip4:198.51.100.25/28: A CIDR notation for a cloud-hosted infrastructure. Document the range, provisioning date, and review cycle.include:mail.crm.example.com: SPF delegation to a CRM vendor. This is a third-party include; you don’t control it. If that vendor adds or updates infrastructure without notice, your SPF configuration changes without your knowledge.include:send.marketingplatform.example.com: Third-party delegation means your SPF coverage depends on a record you don’t own.include:thirdparty-transactional.example.com: A transactional email provider. This may carry significant query depth if the vendor’s own SPF record uses includes.~all: Softfail. Unauthenticated messages are flagged but not rejected. This is intentional in some phased rollouts, but if it’s been there for 18 months with no advancement plan, it’s a control gap.The record passes a syntax check. But without documentation on each mechanism, without a query count, and without a defined review cycle, it isn’t production-ready SPF.
Online SPF checkers validate syntax and perform a basic DNS lookup. They don’t replicate receiving server behavior, they don’t account for query depth, and they can’t assess governance. Here are eight issues that separate production-ready SPF from a record that merely passes syntax:
SPF allows a maximum of 10 DNS lookups per evaluation. include, a, mx, and exists each count. Nested includes compound this. An SPF entry that resolves in 6 lookups in a test environment may exceed 10 in production if a vendor’s SPF record has changed since you last checked.
Next step: Count lookups from the perspective of the receiving server. Use a tool that follows the full include chain, including all third-party records at the time of the check. Staying within the lookup limit requires active management, not just a one-time count at setup.
include DriftVendors rotate sending infrastructure. When a vendor adds a new IP range to their SPF record, your effective SPF record expands without your knowledge or consent. An SPF audit might flag this: You’ve authorized sending from IPs you’ve never reviewed.
Next step: Periodically check each include mechanism and compare the resulting IPs against your approved vendor list. Document any changes and attribute them to a specific vendor.
~all is a legitimate stance during a phased rollout. It isn’t a permanent stance. A domain sitting on ~all for an extended period without a documented timeline for moving to -all is a gap that will surface in a risk review.
Next step: Document why ~all is in place, who approved it, and when it will move to -all. If that decision isn’t documented, it needs to be.
An IP or CIDR notation in a production SPF record without a corresponding asset record is an SPF audit finding. If your record includes ip4:203.0.113.10 and no one can identify which system owns that address without significant investigation, that’s an undocumented asset.
Next step: Map every explicit IP and CIDR notation in your SPF entry to a named system, owner, and setup date. For anything you can’t map, treat it as a candidate for removal until proven otherwise.
DMARC requires either SPF alignment or DKIM alignment. SPF alignment requires the Return-Path domain to match the “From” domain. In forwarding scenarios, SPF alignment breaks. If DKIM is also missing or misconfigured, DMARC fails.
Next step: Review DMARC aggregate reports for any source showing an SPF pass alongside a DMARC failure. This is almost always an alignment issue: Align the Return-Path domain with the “From” domain.
An SPF record on a parent domain doesn’t extend to its subdomains. An SPF record on example.com provides no coverage for mail.example.com, hr.example.com, or notifications.example.com. Each subdomain used to send email needs its own SPF entry.
Next step: List all subdomains, then verify whether each has an SPF entry. Add one where it’s missing.
A domain must have exactly one SPF TXT record. Two SPF records on the same domain cause a PermError, which most receiving servers treat as a fail. This happens most often after migrations where the old record wasn’t removed.
Next step: Query TXT records for each sending domain and confirm there is only one record.
Domains and subdomains that don’t send email are still targets for spoofing. A domain with no SPF record allows anyone to send messages on its behalf. The correct approach is v=spf1 -all: An explicit rejection of all senders.
Next step: Include non-sending domains in your SPF audit. This is especially important for legacy domains, acquired entities, and parked brands.
Apply this checklist at initial deployment and on every periodic review to confirm a production-ready SPF configuration.
v=spf1 and ends with an all mechanisminclude chain requires 10 or fewer DNS lookupsinclude mechanism maps to a named vendor with a current contractv=spf1 -all~all has a documented owner, approval date, and a timeline for moving to -allFor regulated industries, banking, healthcare, and insurance, in particular, email authentication records are increasingly treated as technical evidence of control. An SPF record that was set up three years ago and hasn’t been reviewed since carries no evidence that it’s still correct. Demonstrating that a record is actively managed and periodically reviewed provides that evidence.
For environments managing multiple domains across subsidiaries, business units, or acquired entities, centralizing SPF visibility is the only practical way to maintain that evidence. The operational complexity of manually verifying SPF across a portfolio of 50 or 100 domains, at quarterly intervals, is unsustainable without tooling.
Enterprise environments rarely have a single team managing SPF. Marketing, HR, finance, and product each add sending tools, and DNS changes often move through different approval chains, if they move through any at all.
Sendmarc’s platform centralizes visibility across every domain, so authentication gaps and undocumented senders surface before they turn into SPF audit findings or delivery failures.
For compliance and governance teams, Sendmarc supports the evidence that audit and risk committees expect: Change history, documented policy state, and DMARC aggregate report data that ties SPF outcomes back to specific sending sources. That evidence trail replaces the manual, point-in-time reviews most teams currently rely on.
For IT and security teams already stretched across a distributed environment, the platform flags SPF configuration drift, unrecognized senders in DMARC reports, and subdomain coverage gaps.
Explore how Sendmarc helps you achieve production-ready SPF.