Most senders rewrite the subject line when cold email stops landing. We have sent over 8 million cold emails this year across 50+ B2B campaigns, and the copy is almost never the reason a domain goes dark. It is three DNS records that were never published, or were published wrong. Below, what each one proves, the syntax that passes, the policy ladder, and the failure table that names which record broke.
What Are SPF, DKIM, and DMARC?
The cleanest way to picture them is a building with a guest list, a wax seal, and a bouncer. SPF is the guest list at the door, the record of who is allowed to send on your behalf. DKIM is the seal on the envelope that proves nobody opened and rewrote the letter on the way over. DMARC is the bouncer who checks both and decides what happens to anyone who fails. Cloudflare's email security overview uses the same framing, because that is genuinely how the three records hand off to each other.
None of the three has anything to do with the words in your email. They run before the content is ever evaluated. A message can have perfect copy and still get rejected at the server if the records are missing, because the provider has no way to confirm the sender is who they claim to be.
For cold outreach, where the recipient never opted in, that confirmation is the first thing a provider checks and the cheapest thing to fail. This is the layer underneath everything else in email deliverability, and it is the only layer that is fully binary.
- SPF (Sender Policy Framework)
- A DNS TXT record listing the IP addresses and services allowed to send email for your domain. The receiving server checks the sending IP against that list. If the IP is not authorized, the message fails SPF. Defined in RFC 7208.
- DKIM (DomainKeys Identified Mail)
- A cryptographic signature added to every outgoing message. The receiving server pulls a public key from your DNS and verifies the signature, proving the message came from your domain and was not altered in transit. Defined in RFC 6376.
- DMARC (Domain-based Message Authentication, Reporting and Conformance)
- A DNS policy record that ties SPF and DKIM together and adds alignment. It tells inbox providers what to do when a message fails, monitor it, quarantine it, or reject it, and it sends you aggregate reports naming every source sending mail as your domain. Defined in RFC 7489.
- Alignment
- The DMARC requirement that the domain which passed SPF or DKIM matches the domain a human sees in the From header. A message can pass SPF for a sending platform's domain and still fail DMARC, because the two domains do not match.
| Record | What it proves | Where it lives | What failure looks like |
|---|---|---|---|
| SPF | The sending server is authorized to send for this domain | One TXT record on the root domain | Message marked unauthorized, treated as spoofed, often junked |
| DKIM | The message content and key headers were not altered after signing | TXT or CNAME record at a selector host, such as s1._domainkey |
Signature does not verify, DKIM result reads fail, trust drops |
| DMARC | SPF or DKIM passed and the passing domain matches the visible From | One TXT record at _dmarc.yourdomain.com |
At p=none nothing visible, at p=quarantine spam, at p=reject bounced |
Why Do Cold Email Senders Need All Three in 2026?
Newsletters and transactional mail can sometimes limp along on a partial setup, because recipients opted in and providers cut them slack. Cold email gets no such grace. You are reaching people who never asked to hear from you, so providers scrutinize your authentication harder and any gap reads as a red flag.
The three providers that matter all enforce it now. Gmail and Yahoo began requiring SPF, DKIM, and a published DMARC policy from bulk senders in February 2024, spelled out in Google's email sender guidelines and Yahoo's sender best practices. Microsoft followed on May 5, 2025 for Outlook.com, Hotmail.com, and Live.com, announced in Microsoft's high volume sender requirements.
Read the failure mode carefully, because it changed. A non compliant bulk message is not quietly filtered into spam where a curious recipient might still dig it out. Microsoft rejects it outright with a 550 5.7.15 error at the SMTP level. There is no folder to recover from, because there is no delivery.
The 5,000 threshold is where people talk themselves out of the work. A cold campaign split across 40 mailboxes sending 30 a day is 1,200 messages, well under the line, so the logic says the rules do not apply. That logic is wrong in practice, because the same authentication signals feed the general filtering that applies to every sender at every volume, and because a campaign that works gets scaled. Setting up authentication at 1,200 a day and discovering it is broken at 12,000 is the expensive order.
Two forces drove the change. Providers got serious about spoofing and phishing, and DMARC is the tool that shuts it down at scale. Then AI made generic outreach effectively free to produce, inboxes got noisier, and providers needed a cheap hard signal to sort accountable senders from the flood. Authentication is that signal, because a domain that authenticates cleanly is a domain a provider can hold responsible.
Most domains still have not finished the job. The EasyDMARC 2026 adoption report found DMARC records on 52.1% of the domains it tracked, up from 47.7% the year before, but the share sitting at an enforcing policy rather than monitor only remains a small minority. Publishing the record is the easy half. Reading the reports and moving the policy is where most senders stall.
What Does Each Record Actually Do, In Order?
The three get lumped together, but they solve different problems and run in a specific sequence. Understanding the handoff is what turns a vague "we are in spam" panic into a specific fix, because a failure at one stage explains the failure downstream.
- SPF checks the sender. When your message lands, the receiving server reads the return path domain, looks up its SPF record, and confirms the sending IP is on the authorized list. If you send through Google Workspace, an SMTP relay, and a cold email platform, all three sending sources have to be in that one record or legitimate mail fails.
- DKIM checks the message. Your sending server signs each email with a private key. The receiving server pulls the matching public key from the selector host in your DNS and verifies the signature. If the body or the signed headers changed anywhere along the route, the signature breaks. This is the record that proves authenticity rather than just authorization, which is why RFC 6376 calls it the durable one, it survives forwarding where SPF does not.
- DMARC decides the outcome. DMARC asks whether SPF or DKIM passed and whether the passing domain aligns with the visible From address. Then it applies your published policy, monitor, quarantine, or reject, and mails you aggregate reports listing every source sending as your domain. It is both the enforcement layer and your early warning system for spoofing.
One pass is enough for DMARC. If DKIM aligns and passes, a failed SPF check does not sink the message, which matters because SPF breaks on forwarded mail by design. That is also why DKIM is the record to get right first if you only have time for one, and why the DMARC project's own overview treats alignment, not authentication, as the interesting part.
What Do the Records Actually Look Like?
Every guide describes these records and almost none of them show one. Here is the shape of each, with the values a cold sending domain would realistically publish.
| Record | Type | Host / Name | Value |
|---|---|---|---|
| SPF | TXT | @ |
v=spf1 include:_spf.google.com include:yoursender.com ~all |
| DKIM | TXT or CNAME | selector1._domainkey |
The public key or CNAME target your sending platform generates. Never hand edit it. |
| DMARC | TXT | _dmarc |
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; fo=1; |
| Custom return path | CNAME | em or the host your platform names |
Points the envelope sender at your domain so SPF aligns with the From address |
Three details in the SPF line decide whether it works. Exactly one SPF record per domain, because a second one invalidates both. Every sending source listed inside that single record, not spread across several. And the qualifier at the end, where ~all is a soft fail and -all is a hard fail, with soft fail being the sane default until you are certain nothing legitimate sends from outside the list.
The DMARC tags are where most people copy a string off a forum without knowing what they published. This is what each one does.
| Tag | What it controls | What a cold sender sets |
|---|---|---|
p |
The policy applied to messages that fail DMARC | none at launch, tightened later |
rua |
Where aggregate XML reports are mailed daily | A mailbox you actually read, or a reporting tool |
pct |
Percentage of failing mail the policy applies to | Omit it, or use it to ramp quarantine from 10 to 100 |
aspf / adkim |
Alignment mode, relaxed or strict | Leave both relaxed, which allows subdomain alignment |
sp |
Policy for subdomains | Set it explicitly if you send from subdomains |
fo |
When failure reports are generated | 1, so you get a report on any failing check |
Publish the records in that order, SPF first, DKIM second, DMARC last. DMARC has nothing to evaluate until the other two are live, so a DMARC record published on day one against an unconfigured domain just generates reports full of failures. If you are standing up sending infrastructure from scratch, our guide on setting up email domains for outbound covers the domain and mailbox sizing that comes before any of this, and the DNS records explainer goes deeper on record syntax.
What DMARC Policy Should a Cold Email Sender Use?
A DMARC policy is a ladder, not a setting. You start at the bottom where nothing can break, read the reports until they are boring, then climb. Most senders either never publish one or jump straight to the top and block their own mail.
| Policy | What happens to failing mail | When to move up | Risk if you move too early |
|---|---|---|---|
p=none |
Nothing. Delivery is untouched and you collect reports. | After 2 to 4 weeks of reports showing every legitimate source passing and aligning | None. This is the safe floor and it satisfies the bulk sender rules. |
p=quarantine |
Failing mail is routed to spam. | After 2 to 4 more weeks with no legitimate source failing | A forgotten sending tool starts landing in spam and nobody notices for a week. |
p=reject |
Failing mail is refused at the server and bounces. | This is the destination. Stay here. | Legitimate mail from an unlisted source is destroyed, not delayed. |
For a pure cold sending domain that does nothing but run one campaign through one platform, the climb is fast. There is only one sending source to verify, so the reports go clean quickly and you can be at reject inside a month.
For your primary company domain, go slowly. That domain sends through your CRM, your billing tool, your help desk, your calendar, and three tools nobody remembers buying, and each one is a source that has to authenticate before you tighten the policy. This is one more argument for keeping cold outreach off the primary entirely, which we cover in what a secondary domain is and multi domain sending strategy.
The reason to finish the climb is that p=none protects nothing. It satisfies the checkbox and gives you visibility, and that is all. Only quarantine and reject actually stop somebody spoofing your domain, and a spoofed domain is a reputation problem you did not cause and cannot fix from the copy side.
Clean authentication is the floor, not the win. What gets built on top of it is why Nick booked $72.5K in 60 days. Read the full case study →
Why Do SPF and DKIM Pass While DMARC Still Fails?
This is the single most confusing failure in email authentication and the most common one on cold platforms. Both underlying checks report pass, the DMARC line still reads fail, and nothing in the setup looks wrong.
The answer is alignment. DMARC does not ask whether SPF passed, it asks whether SPF passed for the domain in the From header. When you send through a platform that stamps its own return path, SPF gets evaluated against the platform's domain. That check passes cleanly, for the wrong domain, so DMARC fails.
Two fixes, and you want both. Set a custom return path on your own domain, usually a CNAME the platform gives you, so the envelope sender and the From address share a domain. Then confirm DKIM is signing with your domain rather than the platform's shared signing domain, which most senders never check because the DKIM result says pass either way.
Here is the table to read when the headers do not match the theory.
| What the headers say | What it means | The fix |
|---|---|---|
| spf=pass, dkim=pass, dmarc=fail | Alignment. The passing domain does not match the From domain. | Custom return path on your domain, DKIM signed with your domain |
| spf=permerror | The record exceeded 10 DNS lookups or has a syntax error. | Flatten nested includes into IP ranges, remove dead includes |
| spf=none | No SPF record found on the return path domain. | Publish one TXT record on the correct domain |
| dkim=none | Nothing signed the message. | Enable DKIM in the sending platform, then publish the key |
| dkim=fail on forwarded mail only | A forwarder altered the body or a signed header. | Usually nothing, DMARC passes on SPF or DKIM alone |
| dmarc=none | No DMARC record published at _dmarc. |
Publish p=none with a reporting address today |
Reading these yourself takes 30 seconds. Send a message to a mailbox you control, open the original, and find the Authentication-Results header. It names spf, dkim, and dmarc separately with a result for each, which means you never have to guess which record broke.
What Are the Most Common Authentication Mistakes?
Authentication is simple in theory and easy to get subtly wrong in practice. These are the failures we see most when a client's mail is mysteriously missing the inbox.
- Two SPF records on one domain. A domain gets exactly one. Publish a second and they cancel each other out, and SPF fails everywhere. Merge every sending source into a single record.
- Blowing the 10 lookup limit. RFC 7208 section 4.6.4 caps SPF evaluation at 10 DNS lookups, counting every include, a, mx, ptr, exists, and redirect, including the ones nested inside a vendor's record. Go over and the check returns a permanent error that receivers treat as a failure. Stack four or five vendor includes and you will hit it without ever seeing a warning.
- DKIM enabled but never published. Flipping DKIM on inside a platform does nothing until the public key is in your DNS. Plenty of senders toggle the switch, skip the DNS step, and wonder why signatures fail.
- No DMARC record at all. Skipping DMARC is now enough to get bulk mail rejected outright. A bare
p=nonesatisfies the requirement and starts your reporting the same day. - Alignment failures nobody diagnoses. SPF and DKIM pass, DMARC fails, and the sender concludes authentication is fine because two out of three look green. Read the DMARC result, not the other two.
- Authenticating the primary and forgetting the sending domains. Every domain authenticates independently. A flawless setup on your website domain does nothing for the 8 lookalike domains your campaign actually sends from.
- Treating authentication as the whole job. Records that pass get you through the door. They do not build trust. Warmup, list hygiene, and volume control still decide whether you land.
The last one deserves its own sentence, because it is the mistake that costs the most money. Authentication is necessary and nowhere near sufficient, and a sender who fixes the records and keeps mailing a stale list will watch domain reputation fall anyway.
How Do You Verify All Three Pass Before the First Send?
Never take a platform's green checkmark as proof. Platforms report on what they configured, not on what your DNS actually resolves to, and the two disagree more often than you would expect.
- Send a seed message to a mailbox you control on a different provider, ideally one Gmail address and one Outlook address, since they enforce differently.
- Open the raw headers and read
Authentication-Results. You want spf=pass, dkim=pass, and dmarc=pass on the same line. Two out of three is a fail. - Confirm the DKIM signing domain is yours by checking the
d=value in the DKIM-Signature header. If it names your platform instead of your domain, alignment will break under DMARC. - Wait for the first DMARC aggregate report and confirm it lists only sources you recognize. Anything unfamiliar is either a forgotten tool or somebody spoofing you.
- Run an inbox placement test to see where the mail lands, not just whether it authenticated. Authentication and placement are separate questions.
- Re-verify after any DNS change. Adding a vendor include, rotating a DKIM key, or migrating a domain all silently break a setup that was correct yesterday.
Bake step 6 into your operating rhythm, not just your launch checklist. We treat authentication checks as part of ongoing deliverability monitoring alongside blacklist monitoring, because a record that quietly stops resolving looks exactly like a campaign that stopped working.
What Authentication Cannot Fix
If you are about to run cold email and you do nothing else on the technical side, publish SPF, DKIM, and DMARC first. It is the one part of deliverability fully in your control, it takes an afternoon, and the outcome is binary. Either the records pass and you have a chance, or they do not and you have none. There is no clever subject line that routes around a failed authentication check.
What the records will not do is make anyone want to hear from you. They prove identity, not relevance. Once you are authenticated, every remaining deliverability problem is a behavior problem: mailing people who never should have been on the list, sending too much too fast, or sending a message so generic that recipients mark it as spam. Those show up in bounce rates, in reply rate benchmarks, and in positive reply rate, and none of them move because you fixed a DNS record.
The deeper fix is upstream of the infrastructure entirely. A sharp ICP definition and real list verification do more for placement than any record, because complaint rate is the number providers actually weight, and complaint rate is a function of who you mailed. That is also why we invite rather than sell: an invite onto someone's own recorded conversation earns replies instead of complaints, which is the same lever from the other end. The mechanics of that sit in podcast invite deliverability and domains and warmup for invites.
Where this goes is more enforcement, not less. Providers will keep tightening requirements and leaning on authentication to police a world where anyone can generate a million messages for nothing, and the gap between a monitored policy and an enforced one will stop being optional. The senders who come through that are not the ones with the slickest tools. They are the ones who treated the boring DNS records as day zero infrastructure, proved who they were on every send, and then earned the inbox with a message worth receiving.
See How the Invite Engine Works
15 minute demo. No fluff. We will walk you through the exact system, show real prospect examples, and scope what it looks like for your market.
Book A Call →