SPF, DKIM and DMARC setup for cold email
SPF lists the servers allowed to send for your domain, DKIM signs each message so it cannot be altered in transit, and DMARC tells receivers what to do when either check fails. Publish all three on the sending domain, align them, then verify with a real sent message rather than a DNS lookup alone.
Updated October 26, 2026
SPF: name the servers, then stop
An SPF record is a single TXT record on the domain that lists authorised senders. It is read from left to right and has a hard limit of ten DNS lookups, so a long chain of includes is not free. If your provider tells you to add an include, add it once and remove the ones you no longer use.
The record ends with a policy. For an outreach domain, -all is the honest choice: it tells receivers that anything not listed is forged. ~all is softer and invites receivers to treat unlisted mail as suspicious rather than reject it. Either is workable; what is not workable is leaving no policy at all.
- One TXT record, not several competing ones on the same name.
- Every include still belongs to a service you actually send through.
- Stay under ten DNS lookups; flatten or split if you cannot.
- End with -all after you have confirmed the sender list is complete.
DKIM: the part that survives forwarding
DKIM signs selected headers and the body with a private key, and publishes the matching public key at a selector address. Because the signature travels with the message, it still verifies after a forward, which is why it carries more weight than SPF for reputation.
Your provider generates the selector and gives you a TXT record to publish. Rotate keys on a schedule you can remember, and keep the old selector published until its messages have expired. A selector that disappears while messages signed with it are still in flight turns valid mail into failures.
- 2048-bit key, published as a TXT record at selector._domainkey.domain.
- Sign the From, Subject, Date and Message-ID headers at minimum.
- Publish the new selector before switching signing to it.
- Check the signature on a real message, not only that the record resolves.
Authentication is the floor, not the whole score; sender reputation explains what else receiving servers weigh.
DMARC: choose a policy you can actually support
DMARC ties SPF and DKIM to the visible From domain through alignment, and tells receivers what to do on failure. Start at p=none with a reporting address, read the reports for a couple of weeks, then move to quarantine and finally reject.
Alignment is the detail people miss. SPF can pass while the message still fails DMARC because the envelope domain differs from the From domain. If you send through a provider that rewrites the return path, rely on DKIM alignment and make sure the signing domain matches the From domain.
- p=none with rua reporting first, so failures are visible before enforcement.
- Move to p=quarantine only when the reports are understood.
- p=reject when legitimate mail passes consistently.
- Decide adkim and aspf explicitly if your setup relies on subdomains.
Once all three records verify, run the rest of the deliverability checklist.
Verify with a message, not a lookup
A DNS lookup proves the records exist. It does not prove that your provider signs with the selector you published, or that the return path matches the domain. Send one message to a mailbox you control, open the full headers, and confirm three things: SPF passed for the envelope domain, DKIM verified with the expected selector, and DMARC passed with alignment.
Worked example: a sender published SPF and DKIM correctly but still failed DMARC. The provider signed with a shared selector on its own domain, so DKIM aligned with the provider, not with the From domain. Moving to a selector on the client domain made alignment pass and the spam complaints stopped arriving with the bounce reports.
Keep the DNS you need and nothing more
Every additional record is a future failure. Remove abandoned includes, delete selectors for providers you left, and keep one owner for the zone. If a marketing agency adds a record without telling you, the next DMARC report is where you find out, and by then a campaign has already run.
Write the records down in a place the team can find, with the date and the provider. A one-page note prevents the most common outage in outreach: a record changed by someone who did not know it was load-bearing.
If maintaining the sending infrastructure is the obstacle, managed cold email sending runs campaigns on authenticated mailboxes for you.
What each record does and what a failure looks like
| Record | Purpose | Typical failure sign |
|---|---|---|
| SPF (TXT) | Authorises sending servers | SPF fail or too many DNS lookups |
| DKIM (TXT at selector) | Signs headers and body | Signature does not verify after transport |
| DMARC (TXT at _dmarc) | Policy plus alignment | Passes SPF, fails alignment |
| Return path / bounce domain | Receives bounces | Bounces land nowhere, reputation damage invisible |
| MX on the sending domain | Accepts replies and bounces | Replies lost, DMARC reports undeliverable |
Records above are the minimum for an outreach domain. A domain that only sends and cannot receive will lose its bounce and reply signals.
What authentication will not do
Records are necessary, not sufficient.
- It will not stop spam complaints if recipients did not expect your email.
- It will not override an IP or domain blocklist; that is a separate reputation record.
- It will not fix content that filters dislike, such as image-only messages or redirect chains.
- It will not make a cold list consented. Compliance remains your responsibility.
Frequently asked questions
Can SPF and DKIM both pass while DMARC still fails?
Yes. DMARC requires alignment: the domain that passed SPF or DKIM must match the From domain. A provider signing with its own domain, or rewriting the return path, can pass both checks and still fail alignment.
How many DNS lookups does SPF allow?
Ten. Each include, redirect and mechanism that requires a lookup counts. Exceeding the limit produces a permerror, which receivers treat as no SPF at all.
Should I publish DMARC on the main domain too?
Yes, with a reporting address, even if the policy starts at none. It reveals spoofing attempts and gives you a baseline before you enforce anything.
Do I need DMARC reports if I only send cold email?
They are the only visibility you get into authentication failures from real receivers. Without reports, a policy change is a guess.
Ready to run a campaign? Compare published plans or create a free account. Trials cannot send until a paid plan is active.