Home › Blog

SPF, DKIM and DMARC for Cold Email: Records, Alignment and a 10-Minute Check

By BobWork14 Oct 202612 min read
Diagram of SPF DKIM and DMARC records protecting a cold email sending domain

For cold email, SPF, DKIM and DMARC should pass before the first campaign; watch three things: one SPF record, one DMARC record, and aligned DKIM for every sender. If you skip this, Gmail and Yahoo have less proof that you control the mail stream. This guide gives the records, alignment checks, policy steps, and a 10-minute verification path.

Use authentication with a sending ramp, not instead of one. SPF, DKIM and DMARC prove that your domain is allowed to send. They do not fix bad lists, high complaints, or sudden volume. If you are starting from zero, pair these checks with a conservative email warm-up schedule and the free SPF checker, DKIM checker, and DMARC checker.

What do these records prove?

SPF answers one question: is this sending server allowed to send mail for this domain? It is published as a TXT record on the domain or subdomain used in the envelope sender, also called the return-path or MAIL FROM domain.

DKIM answers a different question: did the message arrive with a valid cryptographic signature from a domain? DKIM uses a selector, such as google, zmail, s1, or a provider-generated token. The public key lives in DNS at selector._domainkey.example.com.

DMARC checks whether SPF or DKIM passed, then whether the passing domain aligns with the visible From domain. It is published at _dmarc.example.com. DMARC also tells receivers what to do with failures: monitor, quarantine, or reject.

For cold email, protect DKIM alignment first. SPF can fail after forwarding because the forwarding server becomes the sender. DKIM usually survives if the message body and signed headers are not changed. DMARC passes when either aligned SPF or aligned DKIM passes.

The common mistake is treating authentication as a checkbox. A record can exist and still fail. The value, selector, host, signing domain, and alignment all matter.

SPF DKIM DMARC cold email checklist

Start with the identity recipients will see. If your visible From address is alex@sales.example.com, then sales.example.com is the domain DMARC evaluates.

For most cold email teams, a dedicated sending subdomain is cleaner than the root domain. Use mail.example.com, hello.example.com, or sales.example.com. Keep outreach separate from payroll, invoices, support, product notifications, and login mail.

Use this table as the safe baseline before you send volume.

ItemSafe starting valueWhen to change itWhy it matters
SPF records per domain1 TXT recordDo not add a second SPF TXTMultiple SPF records can cause SPF permerror
DKIM selectors per sender1–3 selectorsAdd only when a provider gives oneEach sender needs its own valid public key
DMARC starting policyp=noneMove after real senders passYou can monitor without blocking valid mail
DMARC quarantine stepp=quarantine; pct=25Increase after clean reportsGradual enforcement reduces surprise failures
Final DMARC policyp=quarantine or p=rejectUse after all mail is alignedEnforcement helps block spoofing
DNS propagationOften minutes; allow 24–48 hoursWait before repeated retestsCached DNS can show old values
Google complaint rate targetUnder 0.1%; never 0.3%+Pause or reduce if it risesGoogle names these thresholds
Existing domain warm-up14+ daysExtend if spam or bounces riseReputation needs steady signals
New domain warm-up3–4 weeksExtend for new mailboxesNew domains have little history
Outreach per mailbox30–50/dayAdd mailboxes before volumeSudden spikes look unnatural

Google requires authentication for bulk senders and tells senders to keep spam complaint rates low. Check the current Google email sender guidelines before a campaign because provider requirements change.

Do not use p=reject on day one unless you have mapped every legitimate sender. You can break invoices, support mail, calendar tools, CRM mail, and internal systems if they send as your domain without aligned authentication.

Which provider records do you need?

The exact DNS value depends on the provider, region, and account. Use the provider console as the source of truth. The table below shows the usual record shape and the names to look for.

ProviderSPF recordDKIM recordDMARC recordNotes
Google Workspace / GmailTXT at root or sending subdomain: v=spf1 include:_spf.google.com ~allTXT at google._domainkey; value generated in Admin ConsoleTXT at _dmarc: start v=DMARC1; p=none; rua=mailto:dmarc@example.comGenerate DKIM in Admin Console, publish DNS, then start authentication
Zoho MailTXT value shown in Zoho Admin Console; commonly v=spf1 include:zohomail.com ~allTXT at the selector shown by Zoho, often zmail._domainkey or zoho._domainkeySame DMARC pattern on the visible From domainZoho regions can differ, so copy the exact include shown in Zoho
Lark MailTXT value shown in Lark AdminTXT at the selector shown by Lark, often lark._domainkey or feishu._domainkeySame DMARC patternUse a mail-client password for IMAP tools where needed
Amazon SESIf using a custom MAIL FROM domain, the SPF TXT often includes include:amazonses.comEasy DKIM gives three CNAME records from token._domainkey to SES targetsPut DMARC on the visible From domain or subdomainCopy SES-generated CNAMEs exactly
SendGridDomain authentication usually uses CNAME records instead of hand-written SPFCNAME records such as s1._domainkey and s2._domainkey to SendGrid targetsSame DMARC patternUse the Domain Authentication screen; do not invent records
MailgunTXT on sending domain; commonly v=spf1 include:mailgun.org ~allTXT at the provider selector, often k1._domainkey, with the Mailgun public keySame DMARC patternUse a sending subdomain such as mg.example.com or mail.example.com

Amazon SES documents Easy DKIM and custom MAIL FROM in its domain authentication docs. SendGrid explains its CNAME approach in Twilio SendGrid domain authentication. Mailgun lists its DNS records in Mailgun domain verification docs.

Provider dashboards often show a record as verified. That is useful, but it is not the final test. Send a real message to Gmail, open Show original, and inspect SPF, DKIM, and DMARC results. The receiver verdict is what matters.

How do you make alignment pass?

DMARC alignment compares the visible From domain with the domain that passed SPF or DKIM.

The short version:

Example: your visible From address is alex@sales.example.com.

If DKIM signs with d=sales.example.com, DKIM aligns. If SPF passes for bounce.sales.example.com, SPF can align under relaxed alignment because both domains belong under example.com. If DKIM signs with a provider-owned domain, DKIM may pass but still fail DMARC alignment.

That is why custom domain authentication matters. You do not only want the provider to sign mail. You want the provider to sign as your domain.

For cold email, use relaxed alignment until you understand every sender. A common starting DMARC record is:

v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=r; aspf=r

Later, you can tighten alignment:

v=DMARC1; p=quarantine; pct=50; rua=mailto:dmarc@example.com; adkim=s; aspf=s

Strict alignment is cleaner, but less forgiving. Test before you use it. If authentication passes and messages still land in spam, work through Why do emails go to spam?. Complaints, bounces, links, content, sending bursts, and list quality can still hurt placement.

How should DMARC policy move?

DMARC has a natural path: observe, partially enforce, then enforce.

Start with p=none. This policy does not ask receivers to quarantine or reject failures. It lets you collect reports and test alignment while normal mail continues to flow.

After Google, Zoho, Lark, SES, SendGrid, Mailgun, your CRM, billing system, and support tools authenticate correctly, move to partial quarantine.

A cautious record looks like this:

v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@example.com

This asks receivers to apply quarantine handling to a portion of failures. Not every receiver handles pct identically, but it is still useful for staged enforcement.

Then move to:

v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.com

Use p=reject only when you are confident. Reject helps against spoofing, but it is unforgiving when a legitimate tool sends incorrectly.

Use separate DMARC records for subdomains only when needed. DMARC inheritance can be controlled with sp=, but simple is better for most cold email teams. If your sending subdomain has a different risk profile, publish a record directly on that subdomain.

PhaseDMARC policyDurationWhat to watch
Setupp=none7–14 daysSPF pass, DKIM pass, aligned DMARC pass
First enforcementp=quarantine; pct=257 daysLegitimate sources failing DMARC
Stronger enforcementp=quarantine; pct=1007–14 daysSupport, invoices, CRM, and calendar tools
Optional finalp=rejectAfter clean reportsWhether all real mail is authenticated

If you send from a new domain, do not rush this. A 3–4 week ramp gives you time to catch DNS mistakes before volume makes them expensive. The new domain warm-up guide covers the sending side of that timeline.

What breaks authentication most?

Most failures come from a small set of DNS and alignment mistakes.

Two SPF records. You can publish many TXT records, but only one SPF TXT record should exist on the same host. Merge includes into one value.

Wrong:

v=spf1 include:_spf.google.com ~all

and another SPF TXT record:

v=spf1 include:mailgun.org ~all

Better:

v=spf1 include:_spf.google.com include:mailgun.org ~all

Do not keep adding includes forever. SPF has a DNS lookup limit. If you use many senders, remove old tools and prefer provider-specific subdomains.

DKIM selector mismatch. The provider may ask for google._domainkey, zmail._domainkey, s1._domainkey, s2._domainkey, k1._domainkey, or generated SES tokens. If you publish the key under the wrong selector, DKIM fails even when the key is valid.

CNAME target copied incorrectly. Some DNS hosts add the domain automatically. Others expect a fully qualified target. Copy the provider value, then inspect the final DNS result. Do not guess.

Signing with the provider domain. A message can show dkim=pass but still fail DMARC if d= is not aligned with your From domain. Check the full header result, not only the word pass.

DMARC on the wrong host. DMARC belongs at _dmarc.example.com or _dmarc.sales.example.com, depending on the domain you protect. Publishing it as a plain TXT record at example.com does not create a DMARC policy.

Using -all too early. SPF -all is a hard fail. It can be fine after testing, but ~all is safer while you map senders. DMARC enforcement already gives you policy control.

Forwarding breaks SPF. SPF checks the sending server. Forwarded mail often comes from a different server, so SPF can fail. DKIM usually survives forwarding if the signed content is not changed.

Tracking domains are unauthenticated. Link and open tracking domains can add reputation risk. If you use tracking, authenticate the tracking domain and keep it close to the sending identity. For early warm-up, plain text with no links is safer.

BobWork Email Warm-up checks SPF, DKIM, and DMARC daily for each domain it sees, including common selectors such as google, zmail, default, selector1, selector2, k1, s1, mail, dkim, lark, feishu, and zoho. It warms through a shared warm-up network, or a private pool per account if you prefer. The free pool handles ongoing mailbox interaction automatically, but DNS records still need to pass first.

Run the 10-minute check

Do the checks in this order. It avoids the trap of fixing DMARC before SPF and DKIM are valid.

StepActionHow to verify
1List every sender for the domainInclude Google, Zoho, Lark, SES, SendGrid, Mailgun, CRM, billing, support, calendar, and newsletter tools
2Find the visible From domainSend a test and confirm the exact domain after @ in the From address
3Check SPF exists onceQuery TXT records and confirm only one starts with v=spf1
4Confirm SPF includesMatch the include or CNAME method to each active sending provider
5Check DKIM selectorSend a test, view headers, and read the dkim=pass selector and d= domain
6Confirm DKIM alignmentMake sure the DKIM d= domain aligns with the visible From domain
7Check DMARC existsQuery _dmarc.yourdomain.com and confirm one TXT starts with v=DMARC1
8Start at p=noneConfirm the policy is visible before sending volume
9Send to GmailUse Show original and verify SPF, DKIM, and DMARC pass
10Record a baselineSave the header result, DNS values, and date before campaigns start

Run the DNS side with the free SPF checker, DKIM checker, and DMARC checker. Then confirm with a real inbox header because DNS validity and receiver evaluation are not the same thing.

For Google, open the test email, click the three-dot menu, then choose Show original. Look for SPF, DKIM, and DMARC near the top. You want all three to pass, and you want DKIM d= to match or align with your From domain.

If DMARC fails but SPF and DKIM pass, inspect alignment. If SPF fails but DKIM and DMARC pass, do not panic immediately; forwarding can break SPF. If DKIM fails, fix it before campaigns.

Authentication is not a one-time setup. Providers rotate keys, people add tools, DNS records get overwritten, and old services keep sending after a team forgets about them.

Check authentication after every provider change. If you add SendGrid to a domain that already sends through Google, update SPF correctly or use the CNAME records SendGrid gives you. If you add Mailgun on a subdomain, authenticate that subdomain instead of crowding the root domain.

Keep complaint rates low. Google states that senders should keep spam complaint rates below 0.1% and avoid reaching 0.3% or higher. For cold email, targeting, suppression, unsubscribe handling, and volume control matter as much as DNS.

Warm up before outreach. A typical existing domain needs at least 14 days of steady warming. A new domain usually needs 3–4 weeks. Keep warm-up at roughly 10–15 messages per day during campaigns, and keep real outreach around 30–50 emails per mailbox per day. Add mailboxes before you add volume.

If a mailbox starts landing in spam, pause and diagnose. In BobWork Email Warm-up, ready for outbound means 14+ days warming, a 7-day spam rate at or below 10%, and at least 30 warm-up emails received. A mailbox above 5% spam rate should be paused for a few days while you fix the cause.

Use the engine behaviour page if you want the exact warm-up ramp: 3 emails per day, plus 2 per day, capped at 30 by default, weekends at 30%, with sends spread between 09:00 and 18:00 in the mailbox time zone. Gmail and Google Workspace are supported, as are Zoho Mail, Lark Mail, Yahoo Mail, iCloud Mail, Amazon SES, SendGrid, Mailgun, and other IMAP+SMTP mailboxes. Outlook is not supported yet.

Set the DNS records first, send one test to Gmail, and save the header result. Then add the mailbox to BobWork Email Warm-up to keep reputation signals moving while you prepare the campaign. It is free for up to 10 mailboxes per account, with no credit card and no time limit.

Frequently asked questions

Do I need SPF, DKIM and DMARC for cold email?

Yes. You should publish all three before sending cold email. SPF authorises the sending service, DKIM signs the message, and DMARC tells receivers how to evaluate alignment and failures.

Should DMARC start at p=none?

Usually, yes. Start with p=none while you verify legitimate senders. Move to quarantine after reports and tests show SPF and DKIM pass for normal mail. Use reject only when you are confident no valid mail fails.

Can I have more than one SPF record?

No. A domain should have one SPF TXT record. Merge all approved senders into one record. Multiple SPF records are a common reason SPF returns permerror.

Does SPF alignment matter if DKIM passes?

For DMARC, either aligned SPF or aligned DKIM can pass. In cold email, aligned DKIM is usually the safer signal because SPF can break when mail is forwarded.

Should I use my root domain or a subdomain?

Use a dedicated sending subdomain for cold outreach, especially for new programmes. Keep SPF, DKIM and DMARC clean on that subdomain and avoid mixing many unrelated tools on one identity.

How long do DNS changes take?

Many DNS changes show within minutes, but allow up to 24–48 hours for propagation and cached records. Check the authoritative value before assuming a provider is wrong.

Do SPF, DKIM and DMARC guarantee inbox placement?

No. They prove authentication and domain control. Inbox placement also depends on complaints, bounces, content, engagement, sending patterns, list quality and mailbox reputation.

Warm up your mailboxes free

Connect Gmail, Google Workspace, Zoho or Lark. Your mailboxes warm on a shared network, or in a private pool of your own, starting today.

Start free