- SPF, DKIM, and DMARC are three DNS records that together prove your mail is really from you. Since February 2024, Google and Yahoo require all three from anyone sending 5,000+ emails a day — and Microsoft began rejecting non-compliant bulk mail to Outlook.com in May 2025.
- SPF lists who's allowed to send for your domain, DKIM cryptographically signs each message, and DMARC ties them to the address the recipient actually sees (alignment) and tells inboxes what to do on failure.
- Set all three up on a separate sending domain, not your main brand domain. Cold outreach carries reputation risk you don't want anywhere near your primary domain.
- The #1 silent killer is SPF's 10-DNS-lookup limit. Chain too many tools and SPF fails for every email you send. You also can't have two SPF records on one domain.
- For cold email,
p=noneis usually the right DMARC policy — it satisfies the requirement while you monitor reports. Roll towardquarantine/rejectonly after your reports are clean.
Every guide to cold email infrastructure tells you that authentication matters, and the deliverability posts explain why the mailbox providers care. Almost none of them show you the actual DNS records. This is the missing walkthrough: what SPF, DKIM, and DMARC each do, the exact records to publish, the traps that silently break them, and how to satisfy the 2024–2026 rules from Google, Yahoo, and Microsoft without torching your domain reputation in the process.
The Three Records, in Plain English
Email was designed in an era of trust, so by default anyone can put your address in the "From" field. Authentication is the layer that closes that hole. Three records do three different jobs:
| Record | Question it answers | How it works | DNS record |
|---|---|---|---|
| SPF | Is this server allowed to send for my domain? | Lists authorized sending IPs/services; checked against the envelope Return-Path | TXT on the root domain |
| DKIM | Was this message altered, and is it really signed by me? | Private key signs the message; receivers verify with your public key | TXT at selector._domainkey |
| DMARC | Do SPF/DKIM match the visible From address — and what happens if not? | Enforces alignment, sets a failure policy, and requests reports | TXT at _dmarc |
The key concept most people miss is DMARC alignment. It isn't enough for SPF or DKIM to pass — the domain they authenticate has to match the domain the human reads in the From header. DMARC passes when at least one of SPF or DKIM both passes and aligns. That "at least one" is why you don't strictly need both to be perfect, but you absolutely want both configured. (The underlying standards are RFC 7208 for SPF, RFC 6376 for DKIM, and RFC 7489 for DMARC, if you like reading specs.)
Step 1 — Set Up SPF
SPF is a single TXT record on your sending domain listing everything allowed to send on its behalf. A minimal record for a domain sending through Google Workspace looks like this:
v=spf1 include:_spf.google.com ~all
The pieces: include: pulls in an authorized service's own SPF, and the closing all mechanism decides what to do with everything else — ~all is a softfail (recommended while you're setting things up), -all is a hardfail (strict). Add an include: for every legitimate sender: your mailbox provider, your sending tool, any transactional service.
- Only one SPF record per domain. Two
v=spf1TXT records = SPF fails outright. Merge them into one. - The 10-DNS-lookup limit (RFC 7208). SPF evaluation is capped at 10 DNS-querying mechanisms. Every
include,a,mx, andredirectcounts, and eachincludecan pull in more. Blow past 10 and you get aPermError— which fails SPF for every message you send, not just some. Fix it by removing unused vendors and consolidating includes; use "SPF flattening" (replacing includes with resolved IPs) only as a last resort, because flattened records need manual updates whenever a provider's IPs change.
Step 2 — Set Up DKIM
DKIM adds a cryptographic signature to every outgoing message. Your sending platform holds a private key and signs the mail; you publish the matching public key in DNS so receivers can verify it. The record lives at a host built from a selector:
Host: google._domainkey (selector varies by provider)
Type: TXT
Value: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB...
You almost never write this by hand — your mailbox provider or sending tool generates the key and gives you the exact record to paste. Two things to get right:
- Use a 2048-bit key. It's the 2026 default and satisfies Google/Yahoo requirements; 1024-bit is legacy.
- Watch the chunking. A 2048-bit key is longer than a single DNS TXT string allows (255 characters), so it's split into multiple quoted strings. Most DNS hosts handle this automatically, but if you paste it wrong the signature fails silently — mail sends, DKIM just never verifies. (The chunking requirement is a DNS-spec detail; the "silent failure" framing is widely reported by tooling vendors — directional but consistent.)
Step 3 — Set Up DMARC (and Pick the Right Policy)
DMARC ties it all together. Publish a TXT record at _dmarc.yourdomain.com:
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; pct=100; adkim=r; aspf=r
The tags that matter: p= is the policy (none, quarantine, or reject), rua= is where aggregate reports get sent (never omit this — it's your only visibility into what's failing), pct= is the percentage of failing mail the policy applies to, and adkim/aspf set alignment strictness (r = relaxed, the sane default; s = strict).
Roll the policy out in stages — never start at reject:
| Stage | Policy | What happens on failure | When to move on |
|---|---|---|---|
| 1. Monitor | p=none | Nothing — mail still delivers; you just collect reports | Once rua reports show all your legit senders passing & aligned |
| 2. Quarantine | p=quarantine | Failing mail goes to spam/junk | After a clean monitoring window (guides suggest ~30–60 days) |
| 3. Reject | p=reject | Failing mail is rejected at SMTP (bounced, never delivered) | Optional for cold email — see below |
Timeline caveat: the 30–60-day figure is vendor guidance for simple setups; enterprises with sprawling mail infrastructure are advised to monitor a full quarter or longer. For a handful of cold-email sending domains you'll converge much faster. Directional.
What Google, Yahoo & Microsoft Actually Require in 2026
This is the part that turned authentication from "nice to have" into "you don't send at all without it." The rules are pegged to bulk senders — anyone sending roughly 5,000+ messages per day to a provider's users, which most serious cold-email operations cross quickly across their domains.
| Provider | Since | Requirement |
|---|---|---|
| Google & Yahoo | Feb 1, 2024 | SPF + DKIM + DMARC (min p=none), at least one aligned; one-click unsubscribe on marketing mail (RFC 8058, enforced Jun 1, 2024); valid forward + reverse DNS (PTR); spam-complaint rate under 0.3% (aim for <0.1%) |
| Microsoft (Outlook.com/Hotmail) | May 5, 2025 | SPF + DKIM + DMARC (min p=none) aligned; non-compliant bulk mail is rejected with a 550 5.7.515 error, not just junked |
Note the complaint-rate line — authentication gets you in the door, but the 0.1% target / 0.3% hard limit on spam complaints is what keeps you there. That's a list-quality and copy problem, not a DNS problem, and it ties directly into how you build your list and how you stay compliant. (Enforcement has tightened progressively through 2025; exact rejection-cutover dates beyond the ones above are single-sourced — directional.)
Cold-Email-Specific Setup: 5 Things That Are Different
Standard authentication guides assume you're protecting a corporate domain. Cold outreach flips several defaults:
- Authenticate a separate sending domain, never your primary. Cold email invites spam complaints and the occasional blocklisting; you want that risk isolated on cheap secondary domains (close variants of your brand, redirected to your main site) so your
yourcompany.comreputation stays pristine. A common ratio is ~1 domain per 2–3 mailboxes and ~40–50 sends per mailbox per day — vendor rules of thumb, directional — but the principle is firm: spread the load and keep it off the brand domain. - Each sending domain gets its own SPF, DKIM, and DMARC. There's no shortcut here — every domain is authenticated independently.
p=noneis genuinely fine for cold email. Its main job here is satisfying the "must have a DMARC record" requirement while you monitor. You're not primarily fighting spoofers of a throwaway domain, so aggressiverejectbuys little and risks bouncing legitimate mail if alignment isn't perfect.- Publish MX records. The domain must be able to receive mail — for mailbox provisioning, bounce handling, and as a basic legitimacy signal.
- Use your own custom tracking domain. Sharing your sending tool's default tracking domain means sharing its reputation with every other user. A tracking subdomain on your own sending domain keeps links aligned and reputation yours.
The Common Mistakes Checklist
Before you hit send on a new domain, rule out the usual silent failures:
- ☐ Two SPF records on one domain (only one allowed).
- ☐ SPF over 10 DNS lookups → PermError → SPF fails for all mail.
- ☐ DKIM not enabled in the sending tool, or the selector record pasted incorrectly.
- ☐ DMARC with no
rua=— zero visibility into failures. - ☐ Misalignment — SPF/DKIM pass but authenticate a different domain than the visible From.
- ☐ Jumping to
p=rejectbefore monitoring reports. - ☐ Sending cold mail from your primary domain.
How to Verify Everything Works
You never have to guess. Free record checkers — MXToolbox, Google Admin Toolbox, dmarcian (record wizard + DKIM validator + SPF surveyor), and EasyDMARC — will look up and validate each record. The fastest end-to-end test: send a message to a Gmail account, open it, and use "Show original." Gmail shows you a clean PASS/FAIL for SPF, DKIM, and DMARC plus whether each aligned. If all three say PASS, you're authenticated. Pair this with a run through the warmup and deliverability tools before you scale volume.
Frequently Asked Questions
Do I really need all three of SPF, DKIM, and DMARC?
Yes. Since February 2024, Google and Yahoo require all three from bulk senders (5,000+/day), and Microsoft began rejecting non-compliant bulk mail to Outlook.com in May 2025. Technically DMARC only needs one of SPF or DKIM to pass and align, but you should configure both — it's more resilient, and forwarding can break SPF while DKIM survives it.
Should I set this up on my main domain or a separate sending domain?
A separate sending domain, always. Cold outreach carries reputation risk — spam complaints, occasional blocklisting — that you don't want anywhere near your primary brand domain. Register close-variant domains, point them at your main site, and authenticate each one independently.
What DMARC policy should I use for cold email — none, quarantine, or reject?
p=none is the right starting point and is usually sufficient for cold email. It satisfies the requirement to have a DMARC record while you monitor rua reports. Only progress to quarantine or reject after reports confirm all your legitimate senders pass and align — and for throwaway sending domains, aggressive enforcement rarely adds value.
Why is my SPF record failing with "too many DNS lookups"?
SPF is capped at 10 DNS-querying mechanisms (RFC 7208). Each include, a, mx, and redirect counts, and includes can nest more lookups inside them. Exceed 10 and you get a PermError, which fails SPF for every email. Fix it by removing unused senders and consolidating includes; only flatten SPF (resolve includes to raw IPs) as a last resort, since flattened records need manual upkeep.
Can I have more than one SPF record?
No. A domain may have only one v=spf1 TXT record. Two or more cause SPF to fail. If multiple services each told you to "add an SPF record," merge their include: mechanisms into a single record.
How do I check that my records are correct?
Use a free checker like MXToolbox, dmarcian, EasyDMARC, or Google Admin Toolbox to validate each record's syntax, then send a live test to Gmail and use "Show original" to confirm SPF, DKIM, and DMARC all PASS and align. That end-to-end check catches problems the record-syntax tools can miss.
Does authentication alone guarantee I'll land in the inbox?
No — it's the entry ticket, not the whole game. Authentication gets you past the door; staying in the inbox depends on list quality, warmup, sending volume, and keeping your spam-complaint rate under the 0.3% hard limit (ideally below 0.1%). Authentication is necessary but not sufficient.
Don't want to hand-configure DNS across a dozen sending domains? GenFlows builds and maintains the full cold-email infrastructure — authenticated sending domains, warmup, and deliverability monitoring — so your campaigns land in the inbox instead of the spam folder. See how the infrastructure fits together or talk to our team.
By the GenFlows GTM engineering team. Provider requirements and record specifications verified July 2026 against Google, Yahoo, and Microsoft sender guidelines and the relevant RFCs (7208, 6376, 7489); volume ratios, rollout timelines, and single-sourced enforcement dates are flagged directional. This is operational guidance, not legal or security advice. Last updated July 2026.
The GenFlows team builds AI-powered cold outbound systems for B2B teams.