Email Authentication Explained: SPF, DKIM, DMARC and BIMI

Email authentication is three DNS records, published on your own domain, that let a receiving mail server decide whether a message really came from you. SPF names the servers allowed to send. DKIM signs each message so tampering shows. DMARC says what to do when the first two disagree with the address in the From header, and asks for reports about it.

Publishing all three used to be good practice. Since February 2024 it is a condition of delivery at the largest mailbox providers, and most domains still have not finished. Across the domains we test for the Unspam 2026 Email Deliverability Benchmark, 93% publish a valid SPF record and 90% sign with a working DKIM key, but only 48% publish a DMARC policy. The gap between 90 and 48 is this entire article.

You can see where your own domain stands in about thirty seconds with a free email health check, which reads all three records at once and tells you which of them a receiver would actually act on.

The three records answer three different questions

A receiving server does not ask one question about your mail. It asks three, and each record answers exactly one of them.

RecordThe question it answersWhat it is
SPFWas this server allowed to send for this domain?A TXT record listing permitted senders
DKIMWas this message altered, and who signed it?A public key in DNS, plus a signature in the header
DMARCWhat should I do when the answers do not match the From address?A TXT record with a policy and a reporting address

The order matters because DMARC is not independent. It is a decision layer sitting on top of the other two, and it has nothing to act on until at least one of them passes. A domain with DMARC but no working SPF or DKIM has published an instruction that can never be followed.

SPF publishes which servers may send for your domain

SPF is a list of the servers you have authorized, published as a DNS TXT record on your own domain. When a server connects to deliver mail claiming to be from you, the receiver looks up that list and checks whether the connecting IP address is on it.

A record looks like v=spf1 include:_spf.google.com include:sendgrid.net ~all. Each include delegates to another organization's list, which is how you authorize Google Workspace and your marketing platform at the same time without tracking their IP addresses yourself.

Two limits catch people out. The first is that SPF allows a maximum of ten DNS lookups per check, and every include spends at least one. Exceed it and the result is a permanent error, which most receivers treat as a failure rather than as a missing record. The second is that SPF breaks on forwarding: when a mailing list or a forwarding address relays your message, the connecting server is theirs, not yours, and SPF fails through no fault of your own. That second limit is precisely why DKIM exists. Our guide to SPF records covers the syntax and the lookup budget in full. SPF breaking on forwarding is also the problem ARC was built to solve, and our guide to ARC covers why that experiment is being retired.

DKIM signs the message itself, so forwarding does not break it

DKIM attaches a cryptographic signature to each outgoing message, generated with a private key your sending platform holds. You publish the matching public key in DNS, and the receiver uses it to verify the signature.

Because the signature covers the headers and body rather than the connection, DKIM survives being forwarded. It also proves the message was not altered in transit, which SPF cannot do at all. That combination makes it the stronger of the two signals and the one DMARC is most likely to be relying on when your mail passes.

Keys are rotated on a schedule by every reputable sending platform, and the selector in the header is what lets a domain carry several keys at once: s1._domainkey.example.com and s2._domainkey.example.com can both be live, which is how a rotation happens without a gap. A receiver reads the selector out of the signature and looks up only that key. Use 2048-bit keys rather than 1024-bit ones; the shorter length still validates but is no longer considered adequate. The full record format is in our guide to DKIM signatures. How long a key should be, and the ways an upgrade quietly shortens it, are in our guide to DKIM key length.

DMARC only works when SPF or DKIM aligns with your From domain

Alignment is the part most introductions skip, and it is where working records fail. DMARC does not ask whether SPF or DKIM passed. It asks whether either of them passed for the same domain your reader sees in the From header.

Your marketing platform can sign every message perfectly with its own domain and pass SPF on its own sending domain, and DMARC will still fail, because neither identifier matches yours. The fix is configuring that platform to sign as your domain, which every serious sending platform supports and many customers never switch on. The address SPF authenticates is the envelope sender rather than the one your reader sees, which our guide to the Return-Path covers in full.

Once a receiver has an alignment result, your policy tells it what to do:

  • p=none means take no action and send me reports. This is the starting position, not the destination.
  • p=quarantine means put failing mail in the spam folder.
  • p=reject means refuse it at the door.

Two things about DMARC changed in May 2026 that most documentation has not caught up with. RFC 9989 replaced RFC 7489, making DMARC a standards-track specification rather than an informational one, and it retired the pct, ri and rf tags. If your record carries pct at anything below 100 alongside quarantine or reject, your enforcement is now stricter than you configured it, with no edit to your DNS. Our guide to DMARC records covers each tag.

Mailbox providers stopped treating DMARC as optional in 2024

Any guide telling you DMARC is recommended but not required is describing the world before February 2024. That month, Google and Yahoo both began requiring a DMARC policy from bulk senders to their own mailboxes. Apple followed in February 2025 and Outlook.com in May 2025.

Four details are worth getting right, because they are commonly reported wrong:

  • Google's threshold is 5,000 messages a day to personal Gmail addresses. Outlook.com uses the same number for its consumer mailboxes. Yahoo has publicly declined to publish one at all, so treat any figure attributed to Yahoo with suspicion.
  • p=none satisfies the requirement. The providers require a published policy, not enforcement. Starting at none is compliant and is also the correct way to start.
  • Microsoft's rule covers Outlook.com consumer mail, not Microsoft 365 tenants. If you send business to business, that requirement does not describe your recipients.
  • Spam complaint rates carry their own threshold, 0.3% at Google and Yahoo, and a rate below 0.1% is what Google recommends rather than requires.

Authentication is necessary but not sufficient. A perfectly authenticated message still lands in spam if the content trips a filter, which is scored separately and is the subject of our guide to SpamAssassin scores.

Five ways these records fail while looking correct

Every failure below produces a record that reads fine to a human and does nothing at a receiver. They are the ones our own analyzer was built around, in rough order of how often we see them.

Two SPF records on one domain. Publishing a second TXT record rather than editing the first does not merge them. The result is a permanent error, and most receivers treat a permanent error as a failure rather than as no record at all. One domain, one SPF record, always.

More than ten DNS lookups in the SPF chain. Each include costs at least one lookup, and the vendor behind it may spend several more inside its own record. Four or five providers is enough to blow the budget. The record still looks short and readable; it simply stops evaluating partway through.

A typo in the DMARC sp or np tag. This is the cruelest one. An invalid subdomain policy discards the entire record, including a perfectly good p=reject. v=DMARC1; p=reject; sp=quarintine protects nothing at all, and a checker that reports the p it managed to read will tell you the domain is locked down.

Nothing aligned with the From domain. SPF passes on the platform's domain, DKIM signs with the platform's domain, both checks report a pass, and DMARC fails anyway. Every result in your logs looks green. This is the single most common reason a carefully configured domain sits at p=none for a year.

A policy of p=none mistaken for protection. None is an instruction to do nothing. It is the right place to start and the wrong place to stop, and a domain that has sat there for two years is publishing a request for reports nobody reads.

Publish them in order, because DMARC depends on the other two

The sequence below is not a preference. Reversing it publishes a policy with nothing underneath it.

  1. Publish SPF and confirm it passes. One record per domain, under ten lookups, ending in ~all or -all. Two SPF records on one domain is a permanent error, not a merge.
  2. Turn on DKIM signing at every platform that sends as you. Your ESP, your CRM, your helpdesk, your invoicing tool. Each one publishes its own selector.
  3. Check that at least one of them aligns with your From domain. This is the step that gets skipped, and skipping it makes everything after it decorative.
  4. Publish DMARC at p=none with a reporting address. You are collecting evidence, not enforcing anything yet.
  5. Read the reports for two to four weeks. You are looking for legitimate senders you forgot about, because those are what an enforcement policy would block.
  6. Move to p=quarantine, then p=reject. Only once every legitimate source is passing and aligned.

Step five is where the tooling matters, because raw DMARC reports arrive as XML and are close to unreadable by hand. We compared the options in our roundup of DMARC monitoring tools, including the free ones. If you only want to confirm your record is published and parses correctly, a free DMARC checker is enough.

BIMI shows your logo in the inbox, and almost nobody qualifies yet

BIMI displays your brand's logo beside your messages in supporting inboxes, and it is the only one of these standards your recipients can see. It is also the only one that requires the others first: a domain must already be at p=quarantine or p=reject before a receiver will show the logo.

Adoption is genuinely rare. 99% of the domains we test publish no BIMI record at all, which makes it one of the few remaining ways to look different in a crowded inbox. Gmail additionally requires a Verified Mark Certificate, a paid attestation that you own the trademark on the logo, which is the main reason the number stays where it is.

Treat BIMI as the reward for finishing DMARC rather than as a separate project. If you are not at enforcement, there is nothing to configure yet.

What to check after you publish

Records drift. A platform gets added without an SPF update, a key gets rotated badly, someone edits a record by hand and drops a semicolon. The failure is silent, because nothing in your own mail flow tells you that a receiver started rejecting.

Four checks are worth running on a schedule:

  • All three records parse and say what you think they say. An invalid sp or np tag discards an otherwise perfect DMARC record entirely, and a checker that reports the p it can read will hand you a green badge on an open domain.
  • Every sending platform still aligns. New tools get bought, and they do not authenticate themselves.
  • Your DMARC reports still arrive. If your reporting address falls out of the record, the reports stop and nothing announces it.
  • The message itself still passes. Only 89% of the messages we test clear a full deliverability check, with 9% drawing a warning and 2% failing outright, and authentication is only part of that score.

Getting all three records right is the highest-leverage work available in deliverability, because it is the only part a receiver checks before it reads a single word you wrote. If the records are beyond what you want to handle in-house, an email deliverability consultant can take the rollout. Otherwise, run a free spam test on a real message and read the authentication results next to the content ones, which is the fastest way to see what a receiver sees.

Frequently asked questions

What is email authentication?

Email authentication is a set of DNS records published on your sending domain that let a receiving mail server verify a message came from you. Three records do the work. SPF lists the servers authorized to send for the domain, DKIM attaches a cryptographic signature that proves the message was not altered, and DMARC tells the receiver what to do when neither of those matches the domain in the From header. A fourth standard, BIMI, displays your logo once DMARC is at enforcement.

Do I need SPF, DKIM and DMARC, or is one enough?

You need all three, and DMARC is useless without at least one of the other two. SPF and DKIM each produce a pass or fail result but neither says what a receiver should do with a failure. DMARC supplies that instruction and the reporting address, but it only acts on an SPF or DKIM result that aligns with your From domain, so a DMARC record published on a domain with no working SPF or DKIM is an instruction that can never be followed.

What is DMARC alignment and why does my record still fail?

Alignment means the domain that passed SPF or DKIM is the same domain your reader sees in the From header. A sending platform can pass SPF on its own domain and sign with its own DKIM key, so both checks report a pass, and DMARC still fails because neither identifier is yours. The fix is configuring that platform to sign as your domain, which every serious sending platform supports and many customers never switch on. This is the single most common reason a carefully configured domain never leaves p=none.

Is DMARC required?

Yes, for bulk senders to the largest consumer mailboxes. Google and Yahoo both began requiring a published DMARC policy in February 2024, Apple followed in February 2025 and Outlook.com in May 2025. Google's threshold is 5,000 messages a day to personal Gmail addresses and Outlook.com uses the same number for its consumer mailboxes, while Yahoo has publicly declined to publish one. Microsoft's rule covers Outlook.com consumer mail and not Microsoft 365 tenants. A policy of p=none satisfies the requirement, because the providers require a published policy rather than enforcement.

How long does it take to get from p=none to p=reject?

Two to four weeks of reading reports is the minimum, and a few months is common for an organization with many sending tools. The waiting is not bureaucratic. You are looking for legitimate senders nobody remembered, because those are exactly what an enforcement policy would block, and they only appear once real mail has been reported on. Move to quarantine before reject, and only once every legitimate source is passing and aligned.

What is BIMI and do I need it?

BIMI displays your brand logo beside your messages in supporting inboxes, and it is the only one of these standards your recipients can see. It requires DMARC at quarantine or reject first, so it is the reward for finishing the other work rather than a separate project. Gmail additionally requires a Verified Mark Certificate, a paid attestation that you hold the trademark on the logo. 99% of the domains we test publish no BIMI record at all, which is what makes it a way to stand out.

See where your campaign actually lands.

Start a free spam test Inbox placement test