Deliverability & DNS

SPF Record Setup: Examples, Generators & Common Failures

By Alexey Bulygin
SPF Record Setup: Examples, Generators & Common Failures

If you're setting up email infrastructure in 2026, your SPF record is the difference between landing in the inbox and disappearing into the void. Not "spam folder" — void. Total rejection.

Since February 2024, Google and Yahoo enforced strict authentication rules that treat unauthenticated email as hostile. Miss a valid SPF record and you're not risking spam placement — you're getting SMTP 550 errors before your message even finishes transmitting.

For a founder launching a single domain, a broken SPF record means your investor doesn't get the pitch deck. For an MSP managing 500 client domains, it means a Monday morning drowning in "Why can't I email Gmail?" tickets. Either way, it's a bad day that's completely preventable.

This is the definitive guide to SPF: what it does, how to build your SPF record correctly, the hidden traps that silently break deliverability, and how to manage it at scale without losing your mind.


What SPF Is (and What It Isn't)

Sender Policy Framework (SPF) is a DNS-based authorization protocol defined in RFC 7208. An SPF record is a whitelist of IP addresses published in your DNS that tells receiving mail servers which servers are authorized to send email on behalf of your domain. It is not a general security shield — it does one specific job.

How the Mechanism Actually Works

When Gmail receives a message from alice@yourcompany.com, it doesn't just look at the "From" address you see in the interface. It looks at the Return-Path (also called the Envelope Sender) — the technical address used for bounce handling. Then it queries DNS for the SPF record at that domain and asks: "Is the IP sending this message on the authorized list?"

If yes, the check passes. If no, it fails — either a SoftFail (~all) or a HardFail (-all), depending on how you've configured enforcement.

The Critical Distinction: "From" Header vs. Return-Path

This is where 90% of beginners go wrong. SPF does not check the "From:" address visible in Outlook or Apple Mail. It checks the technical Return-Path.

The trap: If you use Mailchimp for newsletters, they typically set the Return-Path to their domain (something like bounce-mc.us1.mailchimp.com) so they can process bounces for you. That means the receiver checks Mailchimp's SPF record — not yours. Your SPF record might be perfectly valid and it never gets consulted.

This "alignment" problem is why SPF alone isn't enough. For a full explanation of how SPF, DKIM, and DMARC interact, read our guide on email authentication SPF DKIM DMARC setup order.

Why You Still Need It

Even though DKIM and DMARC are the heavier lifters in modern authentication, a missing SPF record is a negative trust signal. Microsoft in particular is aggressive about it — you'll see 550 5.7.515 Access Denied errors before the message is even fully received. Don't skip it.


Baseline Pattern: The Single Sender Setup

If you run a small business sending from one primary provider — TrekMail, Google Workspace, or Microsoft 365 — plus maybe one marketing tool, your goal is a clean, single SPF record. The setup is simple. The failure mode is also simple and very common.

The Golden Rule: You must have exactly one SPF record per domain.

When operators sign up for a new service, they often add a second TXT record instead of merging it into their existing one. The result is a PermError. The receiver sees two SPF records, can't decide which to trust, and fails both.

Setup Record Result
Wrong (two records) v=spf1 include:_spf.google.com -all
v=spf1 include:spf.trekmail.net -all
PermError — both fail
Correct (merged) v=spf1 include:_spf.google.com include:spf.trekmail.net -all Pass

Breaking Down a Healthy Record

Component Example What It Does
Version v=spf1 Mandatory. Must appear first. Tells the parser this is an SPF record.
Include include:spf.trekmail.net The workhorse. Instructs the receiver to check that domain's SPF record and trust its IPs too.
IP Mechanism ip4:192.0.2.1 Static authorization for a specific IP — useful for a dedicated server sending transactional email.
Qualifier -all Enforcement policy. -all = HardFail (reject). ~all = SoftFail (accept but mark).

For a step-by-step walkthrough with copy-paste templates, see our dedicated SPF record setup guide.

The SMB Case for TrekMail

Google Workspace runs $6–$18/user/month. Ten users is $720–$2,160/year — for email. TrekMail's Starter plan is $3.50/month flat for the entire domain, up to 100 users. You add one line to DNS (include:spf.trekmail.net), and you're done. No per-seat licensing. No annual renegotiation. Just working email.


Multiple Senders Pattern: The Agency View

If you're an MSP or agency managing dozens of domains, your clients aren't sending from a single provider. They're running HubSpot for sales, Zendesk for support, Klaviyo for marketing, and TrekMail for day-to-day corporate mail. Every one of those tools wants an entry in the SPF record.

You need to fit all of them into a single record without breaking the most annoying constraint in the RFC: the 10-lookup limit.


The 10-Lookup Limit and How to Beat It

RFC 7208 §4.6.4 limits the number of DNS lookups a receiver will perform while evaluating your SPF record to 10. This prevents SPF evaluation from being weaponized for DNS amplification attacks. It also catches a lot of legitimate operators off guard.

What consumes a lookup: include:, a, mx, exists, redirect

What doesn't consume a lookup: ip4:, ip6:, all

The Nested Include Trap

You add include:bluehost.com. That looks like 1 lookup. But Bluehost's SPF record might include spf.protection.outlook.com and mail.bluehost.com — so your one entry just triggered three lookups. And spf.protection.outlook.com has its own chain. The count keeps growing invisibly.

If the total chain exceeds 10, the receiver returns PermError. That's a hard failure. Your legitimate mail hits a wall, and there's no error message to the sender — it just doesn't arrive.

How to Count Your Lookups

Don't guess. Use a CLI tool or a reputable online visualizer. On Mac/Linux:

dig +short txt yourdomain.com

Then recursively dig each include: domain to count the full chain. For a detailed breakdown of this process, see our guide on SPF record lookup limits — it covers how to audit your count and fix the most common overflow patterns.


Flattening vs. Subdomain Segmentation

When you hit the 10-lookup limit — and if you're an agency, you will — you have two realistic options.

Option 1: SPF Flattening (Risky)

Flattening means resolving all those include: chains down to their raw IP addresses and hardcoding them as ip4: mechanisms. Since ip4: costs zero lookups, you can have hundreds of IPs and stay under the limit.

The catch: HubSpot rotates IPs. Klaviyo rotates IPs. Every major ESP does. Your hardcoded list goes stale without warning. One day your SPF record passes; a few months later it silently fails because the IP you hardcoded is no longer in use and the new one isn't in your record.

Only flatten if you have an automated script watching the source records for changes and updating your DNS accordingly. Without that automation, flattening is just technical debt with a time bomb.

Option 2: Subdomain Segmentation (The Right Move)

The cleaner solution is to stop cramming everything into the root domain. SPF is evaluated against the Return-Path domain — and the Return-Path domain can be a subdomain.

Does your marketing team actually need to send from team@company.com? Or can they send from news@marketing.company.com?

Root domain (company.com) — Keep this minimal. Only corporate mail and critical infrastructure.

v=spf1 include:spf.trekmail.net -all

Marketing subdomain (marketing.company.com) — Move the heavy tools here.

v=spf1 include:servers.mcsv.net include:hubspot.com -all

Each subdomain gets a fresh budget of 10 lookups. And if the marketing team burns their sending reputation blasting a cold list, it's marketing.company.com that gets dinged — not your CEO's address on the root domain. This is the architecture that scales.

For copy-paste templates organized by use case, see our SPF record setup templates. For a deeper look at building future-proof multi-sender setups, read our guide on SPF record configuration for multiple senders.


Validation Workflow: What to Check After You Publish

You hit "Save" in your DNS editor. You're not done. Here's the exact sequence to confirm everything actually works.

1. Wait for Propagation (and Verify It)

DNS propagation isn't instant. It can take minutes or hours depending on your registrar and TTL settings. Don't test against your local cache — test against a public resolver:

nslookup -type=txt yourdomain.com 8.8.8.8

The 8.8.8.8 forces the query against Google's public DNS, bypassing whatever your ISP has cached. If your record shows up there, it's live for most of the world.

2. Syntax Validation

Parsers are unforgiving about syntax. Common errors that silently break records:

  • A space before the v=spf1 string
  • ip4: 192.1.1.1 — the space after the colon is invalid
  • Multiple all mechanisms (the parser stops at the first one, so the rest of your record may be ignored)
  • Duplicate include: entries (won't break it, but wastes lookups)

Run the record through a syntax checker before you call it done. The TrekMail DNS setup tool flags these automatically when you use the DNS setup wizard.

3. The Void Lookup Limit

There's a second, lesser-known constraint in RFC 7208: you're allowed a maximum of 2 lookups that return no results (NXDOMAIN or empty responses).

Example: you make a typo — include:spf.trekmaill.net (note the extra 'l'). The DNS query comes back empty. That's 1 void lookup. Two typos in your chain, and your entire SPF record validates as PermError — even if every other mechanism is correct.

This is why syntax checkers matter. A void lookup is invisible until your mail starts bouncing.

4. Header Analysis (The Real Test)

Send an email to a Gmail account you control. Open the message, click the three-dot menu, and select "Show Original." Search for Authentication-Results. You want to see:

spf=pass (google.com: domain of user@yourdomain.com designates 192.0.2.1 as permitted sender)

If you see spf=neutral or spf=softfail, something is wrong. Check the IP in the result against your authorized list — it'll point you directly at the problem. For a full guide to reading these headers, see Checking DNS Status in the TrekMail docs.


Failure Modes: The Mistakes That Break Mail

These patterns cause the majority of SPF record-related support tickets. Know them before you hit them.

1. The Forwarding Black Hole

SPF authenticates the sending IP address. That's also its architectural weakness.

Alice sends Bob an email. Bob has a forwarding rule that redirects everything to Charlie. The message arrives at Charlie's server coming from Bob's mail server IP — not Alice's. Charlie's server checks the SPF record for Alice's domain, sees Bob's IP, and fails the check. Alice's email is perfectly legitimate, and it fails anyway.

You can't fix this with SPF. The solution is DKIM. DKIM attaches a cryptographic signature to the email headers. Since the headers survive forwarding intact, the signature remains valid regardless of which IP delivered the message. This is why you should never rely on SPF alone.

For a full breakdown of why forwarding breaks SPF and how DKIM and SRS fill the gap, read our guide on domain email forwarding (deliverability-safe).

2. The ptr Mechanism

In the early 2000s, the ptr mechanism (reverse DNS lookup) was common:

v=spf1 ptr -all

Don't use it. The RFC officially deprecates ptr. It places excessive load on receiver DNS infrastructure. Gmail and other large receivers penalize or outright ignore records that include it. If you inherited an SPF record with ptr in it, remove it now.

3. The +all Catastrophe

We still see this in the wild:

v=spf1 include:spf.google.com +all

Here's what those qualifiers mean:

  • -all = HardFail (reject everything not on the list)
  • ~all = SoftFail (accept but mark everything not on the list)
  • +all = Pass everything on the entire internet

Setting +all tells every receiver on the planet that any IP address is authorized to send email as your domain. Spammers actively scan for +all records to use those domains as safe harbors for phishing. If your record ends in +all, change it to -all right now.

4. The "Missing Return-Path" Problem with Third-Party Senders

If you're using a marketing tool and haven't configured a custom Return-Path (sometimes called a custom tracking domain or custom bounce domain), those tools will set the Return-Path to their own domain. Your SPF record is never evaluated. For DMARC to pass, SPF alignment requires the Return-Path domain to match your sending domain — and it won't if you're using the default bounce handling.

Most ESPs support configuring a custom Return-Path subdomain (e.g., bounce.yourcompany.com) — use it. This is covered in detail in our guide on DMARC alignment and domain reputation.


Generators: When Safe, When Dangerous

SPF record generator tools exist on a spectrum. Some are genuinely useful. Others will get you into trouble.

The Good

Visualizers that map out your full include: chain are worth bookmarking. They let you audit your lookup count before you hit the limit. Most reputable email deliverability tools include this feature.

Syntax checkers that catch missing colons, illegal characters, and void lookups are worth running every time you make a change.

The Dangerous

"One-Click" Wizards often default to ?all (Neutral policy). Neutral means the check provides no useful signal — it's almost as bad as not having an SPF record from a trust perspective. Always confirm your policy ends in -all or at minimum ~all.

Split-Record Generators: DNS TXT records have a 255-character per-string limit. A long SPF record must be split into multiple quoted strings within a single record — not into two separate TXT records:

  • Correct: "v=spf1 include:a..." "include:b... -all" (two strings, one record)
  • Wrong: Two separate TXT records (PermError)

Some generators handle this string-splitting incorrectly, leaving you with broken syntax. Always verify the output of any generator with a syntax checker before publishing.

For a curated breakdown of which tools are trustworthy, see our SPF record generator and setup guide.


TrekMail Integration: The Logic of Consolidation

The core problem with the big suites isn't that they're bad products. It's that they bundle dozens of things your clients don't need and charge per seat for every single user.

Scenario Google Workspace Business Starter TrekMail Agency Plan
50 client domains, 5 users each (250 mailboxes) ~$1,500+/month Flat rate (Agency plan)
SPF record setup per domain Manual, per-domain configuration One include: applies to all hosted domains
IP reputation management Shared Google pool (you manage nothing) Managed by TrekMail; PTR records handled
Feedback loops and abuse desk Handled by Google Handled by TrekMail

When you host domains on TrekMail, your SPF configuration is static:

v=spf1 include:spf.trekmail.net -all

That one line is the complete SPF record setup for every domain you host with us. We manage the IP reputation, the rDNS PTR records, and the feedback loops. You don't need to warm up IP addresses or deal with abuse desks. You authorize us, and we deliver the mail.

For an MSP with 50 client domains all hosted on TrekMail, that's 50 identical SPF records. No per-seat licensing. No variance between clients. When you add a new client domain, the SPF setup is the same line you've typed a hundred times before. That standardization is what makes the business scalable.

If you're migrating clients from another host, the IMAP Migration Overview and our Required DNS Records guide walk through the exact sequence — MX, SPF, DKIM, DMARC — in the order you should set them up. You can also bulk-import domains via the dashboard if you're onboarding multiple clients at once; see Bulk Importing Domains.


The New Standard for SPF Records

The grace period for email authentication ended in 2024. Running a domain without a properly configured SPF record isn't a minor oversight — it's an active liability. Google and Microsoft treat it as a red flag, and your legitimate mail pays the price.

Here's the short version of everything above:

  1. Audit right now. Run dig +short txt yourdomain.com and count how many records come back. If it's more than one, you have a PermError waiting to happen.
  2. Merge everything into one record. One TXT record, all your senders on the same line.
  3. Count your lookups. Use a visualizer. If you're over 10, segment by subdomain rather than flatten.
  4. Set -all. Move off ~all once you're confident in your sender inventory. +all is a disaster — change it today.
  5. Fix Return-Path alignment. If your marketing tools are sending on Mailchimp's or HubSpot's Return-Path, configure a custom bounce domain so SPF and DMARC align.
  6. Don't stop at SPF. SPF fails on forwarding. DKIM doesn't. Run all three: SPF, DKIM, and DMARC.

A 50-byte SPF record is not a reason to lose a contract or a client. Get your SPF record right once, check it annually, and move on.

Stop fighting DNS. Try TrekMail free — flat-rate email hosting with managed SPF, DKIM, and DMARC for every domain you manage.

Share this article

We use cookies for essential functionality. No ads, no ad tracking.

Sign in to TrekMail

Access your dashboard, mailboxes and DNS.

or
or

Reset email sent

If an account exists for this email, we've sent password reset instructions.

By continuing, you agree to TrekMail's Terms and Privacy Policy.