SPF, DKIM & DMARC for Campaign Monitor.
Campaign Monitor authenticates your sending domain from Account settings → Sending domains, and the record that actually matters is a DKIM TXT record at the cm._domainkey selector — not a shared SPF line. Campaign Monitor generates a public/private key pair per domain and hands you the TXT record to publish; because Campaign Monitor always owns the Return-Path (bounce) domain, SPF can never align to your From domain, so DKIM is the single path to a DMARC pass. Adding include:_spf.createsend.com to your root SPF is optional and does nothing for alignment. Once the cm._domainkey TXT resolves and you click to confirm ("I've added the records" / "Authenticate now"), Campaign Monitor signs mail as your own domain, the "on behalf of"/via-cmail notice disappears, and DMARC passes on DKIM alignment.
Why authenticate Campaign Monitor?
Authenticating your domain in Campaign Monitor isn't housekeeping — it's the difference between the inbox and the spam folder, and the mailbox providers now enforce it. Since February 2024, Gmail and Yahoo have required every bulk sender (roughly 5,000+ messages a day) to pass SPF, DKIM, and DMARC with alignment; Microsoft extended equivalent rules to Outlook/Hotmail/Live for 5,000+/day senders in May 2025; and Gmail has kept tightening enforcement since, with non-compliant bulk mail increasingly rejected outright rather than just filtered. Campaign Monitor is a bulk marketing sender, so your campaigns are squarely in scope. Until you authenticate, Campaign Monitor sends under its own domain: recipients see the mail isn't really from you (a "via cmailXX.com" or "on behalf of" note), your From address doesn't align, DMARC can't pass, and your reputation is pooled with every other unauthenticated Campaign Monitor sender. There's a provider-specific twist that makes DKIM non-negotiable here: Campaign Monitor keeps its own Return-Path on its bounce domain, so SPF can never align to your domain — DKIM is the only mechanism that carries your DMARC pass. Skip the cm._domainkey TXT and you have no aligned authentication at all.
The SPF reality for Campaign Monitor
Campaign Monitor is technically an "include" provider — include:_spf.createsend.com is a real, live, flat SPF record (six ip4 ranges, no nested includes, so it counts as a single DNS lookup) — but the honest reality is that it never aligns and is not the path to DMARC compliance. Here's why: Campaign Monitor sends every campaign with the envelope sender / Return-Path on its own bounce domain (a createsend.com/cmail subdomain), because Campaign Monitor — not you — processes the bounces. SPF is always evaluated against that envelope domain, so SPF resolves against Campaign Monitor's servers, never against your From domain. It may raw-"pass," but it does not align with your organizational domain, and DMARC only counts SPF when it aligns. Unlike Postmark (custom Return-Path CNAME) or a dedicated-IP setup, Campaign Monitor offers no custom Return-Path on standard accounts, so there is genuinely no way to make SPF align — DKIM signed as d=yourdomain.com is the one mechanism that aligns and carries your DMARC pass. Adding include:_spf.createsend.com to your root SPF burns one of your 10 SPF lookups for zero DMARC benefit; you can safely leave it off. Reserve your root SPF record for the senders that actually put your domain in the Return-Path — Google Workspace, Microsoft 365, a transactional relay — and let DKIM do the work for Campaign Monitor.
Two ways to set it up
DKIM only — the cm._domainkey TXT (recommended)
- Publish the cm._domainkey DKIM TXT Campaign Monitor generates — it signs as d=yourdomain.com and aligns to your From domain
- DKIM alignment is the only thing that makes DMARC pass for Campaign Monitor mail
- Adds zero DNS lookups to your root SPF — there's nothing to merge and nothing to flatten
- Pair it with your own _dmarc record and you have the complete, correct setup
Adding include:_spf.createsend.com (optional, doesn't help DMARC)
- Raw SPF passes against Campaign Monitor's IPs but never aligns to your From domain
- Campaign Monitor owns the Return-Path, so SPF alignment is structurally impossible — no account setting changes that
- Costs one of your 10 SPF DNS lookups for zero DMARC benefit
- Only worth it if a specific inbound filter you deal with insists on a raw SPF pass
Step by step
- 1
Open the Sending domains page
Click your profile image (top-right) → Account settings, then open the Sending domains tab. This one page handles adding a domain and confirming its DNS records.
- 2
Add your sending domain
Under 'Manage your sending domains', click Add domain and enter the exact domain you send From (e.g. yourdomain.com). You can only authenticate domains you or your organization own, and authenticating example.com does NOT automatically cover subdomains like news.example.com — those authenticate separately.
- 3
Copy the record it generates
Campaign Monitor generates a per-domain DKIM key and shows the DNS record to add: a TXT record at host cm._domainkey with a value beginning k=rsa; p=… followed by the public key. Copy it exactly. The screen may also surface the optional include:_spf.createsend.com SPF line, which you can ignore.
- 4
Add the DKIM TXT record
At your DNS host, create a TXT record: Host/Name cm._domainkey, Value the full k=rsa; p=… string Campaign Monitor gave you. Keep the type as TXT — Campaign Monitor DKIM is a TXT record, not a CNAME. Don't alter the key value or add stray spaces inside the p= part.
- 5
Fix host-field doubling
Many registrars auto-append your domain to the host field, so entering cm._domainkey.yourdomain.com produces cm._domainkey.yourdomain.com.yourdomain.com. Enter just the label cm._domainkey if your panel adds the domain for you; enter the full cm._domainkey.yourdomain.com only if it doesn't.
- 6
Publish your DMARC record
Campaign Monitor doesn't create DMARC. Add a TXT record at host _dmarc with v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. Start at p=none (monitor-only) so nothing is affected while you confirm alignment. Skip this if a _dmarc record already exists — a domain must have exactly one.
- 7
Skip the SPF include (optional)
Because Campaign Monitor owns the Return-Path, adding include:_spf.createsend.com does nothing for DMARC alignment and costs a DNS lookup — leave it off. Only add it (merged into your single v=spf1 record) if a specific inbound filter you deal with insists on a raw SPF pass.
- 8
Confirm in Campaign Monitor
Back on the Sending domains page, click 'I've added the records' (or 'Re-check record' / 'Authenticate now' if you exited the flow). DNS can take up to 24–72 hours to propagate; Campaign Monitor recommends waiting before you confirm. The status flips to Authenticated once the cm._domainkey TXT resolves.
- 9
Send from the authenticated domain
In each client/audience and campaign, set the From address to one on the authenticated domain (e.g. news@yourdomain.com) so the mail is actually DKIM-signed as your domain — confirming DNS alone doesn't change a campaign already set to a different From address.
Records to add
Campaign Monitor generates the exact values in its setup wizard — these show the shape of what you'll add at your DNS host.
| Type | Host | Value |
|---|---|---|
| TXT | cm._domainkey | k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC…(public key generated by Campaign Monitor)The DKIM record that matters — signs as your domain and is the only thing that aligns for DMARC. Illustrative; the exact per-domain key is shown under Account settings → Sending domains. Selector is always cm. |
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comYou add this yourself — Campaign Monitor never creates it. One per domain; start at p=none, then tighten to quarantine/reject. |
| TXT | @ | v=spf1 include:_spf.createsend.com ~allOPTIONAL and not recommended — Campaign Monitor owns the Return-Path, so this raw-passes but never aligns and does nothing for DMARC. Shown only so you recognize the legacy include. If you add it, merge into your single SPF record; it costs 1 DNS lookup. |
Keep exactly one SPF (v=spf1) TXT record on your root domain — merge every sender into it. Two SPF records is itself an error.
The 10-lookup budget
SPF is capped at a hard 10 DNS lookups — go over and it returns a permerror and stops validating everywhere. Here's what Campaign Monitor's setup costs against that budget.
Campaign Monitor's recommended setup adds 0 lookups — all 10 stay free for the senders that do need an include.
DKIM
DKIM in Campaign Monitor is a TXT record you publish yourself — not a CNAME delegation like SendGrid or Mailchimp. When you add a domain under Account settings → Sending domains, Campaign Monitor generates a public/private key pair for that domain and gives you a TXT record at the fixed selector cm._domainkey.yourdomain.com whose value is k=rsa; p=<your public key>. You create that TXT and paste the full value exactly as shown; Campaign Monitor keeps the matching private key and signs your outgoing campaigns with d=yourdomain.com. Two things make this different from most modern ESPs. First, because it's a self-published TXT holding the public key (not a CNAME pointing back to Campaign Monitor), the key is effectively static — Campaign Monitor can't silently rotate it the way a CNAME-delegated provider can, so if you ever need to change it you re-generate in the dashboard and republish the new TXT. Second, the selector is always cm, so it won't collide with other providers' selectors (google, selector1/selector2, k2/k3, etc.) — you can run Campaign Monitor DKIM alongside Google Workspace, Microsoft 365, or another marketing tool without conflict. These are typically 1024-bit RSA keys; publish whatever length Campaign Monitor shows. Crucially, a verified cm._domainkey TXT on its own is enough to make Campaign Monitor mail pass DMARC, because DKIM aligns to your domain — and it's the only mechanism that can, since Campaign Monitor owns the Return-Path and SPF can never align.
DMARC
DMARC is a separate policy record on your root domain that Campaign Monitor does not create — you add it yourself at your DNS host. Publish a TXT record at _dmarc.yourdomain.com starting with v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. p=none is monitor-only: it changes nothing about delivery but tells receivers to email you aggregate (rua) reports so you can confirm Campaign Monitor mail is passing DKIM aligned to your domain. Because Campaign Monitor aligns via DKIM only (never SPF), in those reports you're specifically looking for your own domain in the DKIM result — expect Campaign Monitor's envelope/SPF to show a createsend/cmail domain, which is normal and fine. Watch the reports for a week or two, make sure every legitimate sender (Campaign Monitor plus any other tools) is authenticating, then tighten the policy to p=quarantine and eventually p=reject. Keep exactly one _dmarc record for the whole domain no matter how many senders you use; never add a second one for Campaign Monitor. One thing to keep in mind at enforcement: since SPF can never align for Campaign Monitor, DKIM is your single point of alignment — if the cm._domainkey record is ever removed or mangled, Campaign Monitor mail fails DMARC outright, so at p=reject keep an eye on that record.
Check it actually worked
Don't trust the dashboard's "Authenticated" badge alone — confirm it on a real message. Send yourself a test campaign from an address on the authenticated domain, open it in Gmail, and choose ⋮ → Show original: you want DKIM: PASS showing yourdomain.com (selector cm) and DMARC: PASS. SPF will typically show a createsend/cmail envelope domain rather than yours and won't align — that is expected on Campaign Monitor and doesn't matter, because DKIM carries the alignment. Also confirm the "on behalf of" / "via cmailXX.com" line is gone. You can spot-check the raw record with dig TXT cm._domainkey.yourdomain.com. Then run your domain through Qualisend's domain health check to confirm the cm._domainkey TXT and your _dmarc record both resolve, and once DMARC aggregate reports start arriving, drop one into the DMARC report analyzer — Campaign Monitor should show up as a DKIM-aligned, passing source.
Common gotchas
- DNS setup
DKIM is the ONLY path to DMARC here. Campaign Monitor always owns the Return-Path, so SPF can never align to your domain — if you skip the cm._domainkey TXT you have zero aligned authentication and DMARC cannot pass, no matter what SPF you publish.
- Breaks auth
Don't bother adding include:_spf.createsend.com to your root SPF. It raw-passes against Campaign Monitor's IPs but never aligns to your From domain, so it does nothing for DMARC and needlessly burns one of your 10 SPF lookups.
- DNS setup
Campaign Monitor DKIM is a TXT record, not a CNAME. Publish the k=rsa; p=… value at cm._domainkey exactly as shown and keep the type TXT. Because it's a static self-published key there's no automatic rotation — if Campaign Monitor ever hands you a new key, republish the new TXT.
- Breaks auth
Authenticating example.com does NOT authenticate its subdomains. If you send From news.example.com or a per-client subdomain, add that exact domain as its own sending domain in Campaign Monitor — it needs its own cm._domainkey TXT (and ideally its own DMARC handling).
- DNS setup
Host-field doubling: many registrars auto-append your domain, so entering cm._domainkey.yourdomain.com becomes cm._domainkey.yourdomain.com.yourdomain.com. Enter just cm._domainkey if the panel adds the domain for you.
- DNS setup
DNS can be slow — Campaign Monitor tells you to allow up to 72 hours before clicking to confirm. If 'I've added the records' / 'Re-check record' fails, the record usually just hasn't propagated yet or the host field is doubled; re-check the value and try again.
- Breaks auth
Keep exactly one SPF TXT and one _dmarc TXT on your root. If you also send from Google Workspace, Microsoft 365, or a transactional relay, merge their mechanisms into a single v=spf1 record — two SPF records is itself a PermError.
- DNS setup
The 'personalize the domain used in your links' (branded click-tracking) CNAME is a separate, optional feature about tracking links — it is not part of authentication and has no effect on SPF, DKIM, or DMARC.
Build your SPF record
Campaign Monitor doesn't need an SPF include: on your root domain — use the generator to assemble one clean record for your other senders, and keep it to a single line.
Sending sources
Search for each platform you send email through and tick it.
Search for your email platform above, or .
This domain's own servers
Authorize the domain itself, if it sends mail directly (not through a platform above).
Other senders & IPs
Anything not in the list — another provider's SPF host, or specific IP addresses.
We add the include: prefix — enter the hostname your provider documents.
Policy for everyone else
What receivers should do with mail from any server not listed above (the all mechanism).
No senders yet, so every message would hit the ~all policy. Add the platforms you send through in step 1.
- Publish it as a TXT record at your root domain — host @ (the bare domain), value the full string above.
- Keep only one SPF record per domain. Merge every sending source into this single line — a second TXT record starting v=spf1 makes both invalid.
- Stay at or under 10 DNS lookups. Each include:, a and mx counts, and an include can trigger more lookups inside itself — ip4: and ip6: are free.
Authentication published? The next step is sending to a clean, verified list.
Verify a listCampaign Monitor SPF — FAQ
Related reading
Once it's published, confirm everything resolves with the domain health check, then read who's sending as you with the DMARC report analyzer. Browse all sending sources in the generator. Authentication is only half of deliverability, though — a listed sending IP or domain still lands you in spam no matter how clean your SPF is, so it's worth watching the blacklists with blacklist monitoring.
Authenticated — now keep the list clean
Passing SPF, DKIM, and DMARC gets you to the inbox; a clean list keeps you there. Verify yours — start free with 100 credits, no card required.