The three records in one minute
A working SPF, DKIM, and DMARC setup is the entry ticket to the inbox in 2026. All three are DNS TXT records on your sending domain, and each answers a different question.
SPF is the guest list: which mail servers are allowed to send email on behalf of your domain. DKIM is the tamper-proof wax seal: a cryptographic signature proving the message really came from you and was not altered in transit. DMARC is the instruction card for the bouncer: what receivers should do with mail that fails the first two checks — and where to send you reports about it.
| Record | Plain-English job | Where it lives | Defined in |
|---|---|---|---|
| SPF | Guest list — which servers may send for your domain | TXT record on yourdomain.com | RFC 7208 |
| DKIM | Wax seal — cryptographic signature on each message | TXT record at selector._domainkey.yourdomain.com | RFC 6376 |
| DMARC | Instruction card — what to do on failure, plus reporting | TXT record at _dmarc.yourdomain.com | RFC 7489 |
Why bother? Because Google’s sender guidelines require SPF or DKIM from every sender, and require SPF and DKIM and a DMARC policy from bulk senders — Yahoo’s requirements mirror them. This guide is the setup deep-dive under our broader deliverability and compliance guide; when you are done, check your work in thirty seconds with our free email deliverability checker.
SPF record explained: the guest list
SPF (Sender Policy Framework) is a single TXT record on your domain listing every service authorized to send email as you. When a receiving server gets a message claiming to be from yourdomain.com, it looks up that record and checks whether the connecting server is on the list.
yourdomain.com TXT "v=spf1 include:_spf.google.com include:amazonses.com ~all"Reading it left to right: v=spf1 declares the record type. Each include: pulls in a provider’s list of sending servers (your email provider, your sending platform — Resend, for example, gives you the exact include during domain verification). The tail qualifier says what to do with everyone else: ~all (softfail — mark suspicious) is the common choice; -all (hardfail — reject) is stricter.
Two rules cause most SPF breakage. First, one SPF record per domain — if you add a second v=spf1 TXT record instead of merging includes into the existing one, SPF returns a permanent error and effectively fails for everyone. Second, RFC 7208 caps SPF at 10 DNS lookups per check; every include, a, mx, and redirect costs lookups, and a record that exceeds the limit fails with a permerror even though it looks fine to the eye.
DKIM setup guide: the tamper-proof seal
DKIM (DomainKeys Identified Mail) has your sending server sign each outgoing message with a private key. The matching public key is published in your DNS under a named selector, so any receiver can verify the signature — proving the mail came from a server holding your key and that the signed content was not modified in transit (RFC 6376).
resend._domainkey.yourdomain.com TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."
# "resend" is the selector — your provider picks the name and gives
# you the exact record (sometimes as a CNAME) during domain setup.In practice you never generate DKIM keys yourself: your email provider or sending platform generates the pair, keeps the private key, and hands you the public-key DNS record to paste. Two details worth knowing: Gmail requires a DKIM key of at least 1024 bits for mail to personal accounts (2048 is the common default now, per Google’s guidelines), and a message can carry several DKIM signatures — your platform’s plus your own domain’s — which is normal and fine.
Unlike SPF, DKIM survives forwarding: the signature travels inside the message, so a forwarded email still verifies. That is exactly why DMARC lets a message pass on either SPF or DKIM.
DMARC policy explained: alignment, policy, reports
DMARC (Domain-based Message Authentication, Reporting and Conformance) sits on top of the other two and adds the piece they are both missing: it checks that the domain in the visible From: header — the one humans see — matches the domain that SPF or DKIM actually validated. That match is called alignment, and it is what stops a spammer from passing SPF for their own throwaway domain while displaying yours (RFC 7489, dmarc.org).
_dmarc.yourdomain.com TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
# p= policy for failing mail: none | quarantine | reject
# rua= where aggregate reports are emailed (daily XML summaries)
# sp= optional separate policy for subdomains
# pct= optional percentage of failing mail the policy applies toThe p= tag is the decision: p=none means monitor only — nothing is blocked, but you receive reports; p=quarantine asks receivers to junk-folder failing mail; p=reject asks them to refuse it outright. The rua= address receives aggregate reports: daily XML summaries from Gmail, Yahoo, and others showing which servers sent as your domain and whether they passed. Raw XML is unreadable — run it through any free DMARC report viewer.
The rollout: none → quarantine → reject
Publishing p=reject on day one is how companies break their own invoices, calendar invites, and newsletter — any legitimate service you forgot about starts getting refused. The safe path is staged:
Each stage is one TXT-record edit. The reports tell you when you are ready: when every legitimate sending source passes with alignment, tightening is safe.
During the p=none phase, expect surprises: the helpdesk tool sending from your domain, an old marketing platform nobody turned off, a regional office with its own SMTP relay. Every one of them either needs to be authorized (SPF include + DKIM enabled) or retired. That inventory is the real work of DMARC — the record itself takes five minutes.
For a dedicated cold-outreach domain the calculus is simpler: only one platform sends from it, so there is little to inventory and you can usually reach p=quarantine within a few weeks. Our deliverability guide covers why outreach should live on its own domain in the first place, and our infrastructure guide covers the domain setup around it.
Troubleshooting: symptom → cause → fix
| Symptom | Likely cause | Fix |
|---|---|---|
| SPF returns permerror | Two v=spf1 records, or more than 10 DNS lookups | Merge into one record; prune includes for services that no longer send |
| SPF passes but DMARC fails | Alignment miss — SPF validated the bounce domain, not your From: domain | Enable DKIM signing with your own domain, or use a From: on the validated domain |
| DKIM fails after a provider migration | Old selector record deleted or new one never published | Publish the new selector record; keep old selectors up for a week or two |
| DMARC reports show unknown servers | Forwarders (usually harmless) — or actual spoofing | Check volumes: a trickle is forwarding; sustained volume from one network is worth blocking with a stricter policy |
| Everything passes, still in spam | Authentication is necessary, not sufficient — reputation or content problem | Work through the deliverability guide: warmup, volume caps, list quality |
| Record edits not taking effect | DNS propagation and caching | Wait up to an hour (TTL-dependent) and re-test before changing anything else |
To check all three records — plus MX and the blocklist basics — in one pass, run your domain through our free email deliverability checker. It reads your live DNS the same way a receiving server does, entirely in your browser.
Next: the volume rules these records unlock — Google and Yahoo’s sender requirements — and the domain architecture to put them on.
Frequently asked questions
Do I need DMARC if I send fewer than 5,000 emails a day?
Strictly, Google’s DMARC requirement applies to bulk senders (around 5,000 messages a day to personal Gmail accounts). Practically, yes — p=none costs one TXT record, satisfies the requirement if you ever cross the line, and gives you failure reports that catch misconfigurations and spoofing. There is no volume at which DMARC hurts you.
Can I have two SPF records on one domain?
No. RFC 7208 requires a single v=spf1 record per domain; publishing two makes SPF checks return a permanent error, which reads as a failure. If a new tool asks you to “add an SPF record” and one already exists, merge the new include: into the existing record instead.
Is p=none enough, or do I have to reach p=reject?
p=none meets the Gmail and Yahoo bulk-sender requirement, so you are compliant on day one. But p=none does not stop anyone spoofing your domain — it only reports it. Treat none as the monitoring phase and move to quarantine, then reject, once the reports show all your legitimate mail passing with alignment.
What is DMARC alignment in simple terms?
The domain your recipient sees in the From: line must match the domain that SPF or DKIM actually verified. A message can pass SPF for spammer-infra.com while displaying [email protected] — alignment is the DMARC check that catches exactly that. In practice: sign with DKIM using your own domain and alignment mostly takes care of itself.
How long do DNS changes take to work?
Usually minutes, up to an hour or so depending on your DNS provider and record TTLs. Resist the urge to keep editing while waiting — re-test with a checker first, since half of “my record is not working” reports are just caching.
My platform verified SPF and DKIM for me — what is left to do?
DMARC, almost always. Sending platforms (Resend included) walk you through SPF and DKIM during domain verification because they control those values, but the DMARC record is a policy decision on your domain, so most leave it to you. Add the p=none record with a rua= address and you are done in five minutes.
Sources
- [1]RFC 7208 — Sender Policy Framework (SPF)
- [2]RFC 6376 — DomainKeys Identified Mail (DKIM) Signatures
- [3]RFC 7489 — Domain-based Message Authentication, Reporting, and Conformance (DMARC)
- [4]dmarc.org — DMARC Overview
- [5]Google Workspace Admin Help — Email sender guidelines
- [6]Resend — Domains documentation
BusinessMCP Team
Every guide is written from running BusinessMCP on its own platform — the match rates, reply rates, and deliverability lessons are from our own data, not recycled blog folklore. About BusinessMCP
Turn your business into one AI-ready MCP server
Connect your tools, install one tracking script, and expose your unified data to any AI agent through a single secure endpoint.
Get started free