Opens in a new tab

Deliverability

How to set up SPF, DKIM and DMARC for a new sending domain

Three DNS records decide whether mailbox providers believe you are who you say you are. Here is what each does, what order to publish them in, and how to tighten DMARC without losing real mail.

Mailnaptic team

Published 1 October 2026

8 min read

Domains / example.com (placeholder data)

Type

Host

Status

TXT

example.com

Verified

CNAME

mn1._domainkey

Verified

CNAME

mn2._domainkey

Verified

TXT

_dmarc

p=none

Domain health: green. Ready to send.

A new sending domain has no history. Mailbox providers cannot tell your newsletter from a forged one, so they lean on three DNS records to decide: SPF, DKIM and DMARC. Get them right before the first campaign and most early deliverability trouble never shows up.

This guide covers what each record does, the order to publish them in, how to check that they work, and how to tighten DMARC step by step. We use the Mailnaptic Domains page for the examples, but the DNS side is the same with any sending platform.

Every domain name, selector and address below is a placeholder. Copy the real values from your own Domains page, not from this article.

What each record does

The three records answer three separate questions, and all of them live in DNS under your domain.

SPF: who may send

A TXT record on your domain that lists the servers allowed to send mail for it. Receivers compare the server that delivered the message against that list.

DKIM: was it altered

Each message carries a cryptographic signature. The public key sits in DNS, so receivers can confirm the message was signed by an authorised sender and not changed on the way.

DMARC: what to do

A policy that tells receivers what to do with mail that fails the checks, and where to send reports about it.

DMARC does not authenticate anything on its own. It looks at whether SPF or DKIM passed and whether the passing domain matches the visible From address, a test called alignment. That is why Mailnaptic's own guidance says to get SPF and DKIM passing first and add DMARC last.

The order to do things in

The sequence matters, mostly because DMARC is the one record that can do damage if it goes in too early.

Order of work

1. Add the domain in Mailnaptic

Domains, Add Domain, domain name only

2. Publish SPF

One TXT record, merged with any existing one

3. Publish both DKIM CNAMEs

Two selectors, copied exactly

4. Click Verify DNS

Wait for propagation, then retry

5. Publish DMARC at p=none

With a report address someone reads

6. Send, read reports, tighten

None, then quarantine, then reject

Steps 1 to 4 are an hour of work plus some waiting for DNS. Steps 5 and 6 are spread over weeks, and that is on purpose.

The records, with placeholder values

When you add a domain, Mailnaptic lists the records to create. The shapes below match what you will see, using example.com in place of your domain.

DNS records for example.com (placeholders)

SPF, TXT on example.com

v=spf1 include:spf.mailnaptic.com ~all

DKIM, two CNAME records

mn1._domainkey.example.com CNAME mn1.dkim.mailnaptic.com mn2._domainkey.example.com CNAME mn2.dkim.mailnaptic.com

DMARC, TXT on _dmarc.example.com

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

SPF

SPF is a single TXT record on the root of the domain. If you already send from Google Workspace or Microsoft 365 you have one, and the right move is to add the Mailnaptic include to it, for example v=spf1 include:_spf.google.com include:spf.mailnaptic.com ~all. Two SPF records on one domain make SPF fail outright.

Two limits are worth knowing. SPF allows ten DNS lookups in total and every include counts toward that, so a domain with many services can go over without anyone noticing. And use ~all (soft fail) while you are setting up. Switch to -all once you are sure every legitimate sender is listed.

DKIM

DKIM is two CNAME records, one per selector. Mailnaptic uses two so keys can be rotated without a gap in signing. Create both, even if the second looks redundant.

Two gotchas come up again and again. Some DNS panels append your domain automatically, so typing the full name produces mn1._domainkey.example.com.example.com. If a record cannot be found, check that first. And if you use Cloudflare, set the DKIM records to DNS only (grey cloud) instead of proxied.

DMARC

DMARC is a TXT record at _dmarc on your domain. Start in monitoring mode. The rua address receives daily aggregate reports, so use a mailbox that exists and that someone will actually open.

One more record you may see

Depending on your setup, the Domains page can also list a domain verification TXT record and a return-path MX record on a subdomain. The MX belongs on that subdomain only, never on your root domain.

Verify before you send

Publishing is half the job. A typo fails quietly, and you find out when mail starts landing in spam.

Open the domain in Mailnaptic and click Verify DNS. Each record gets a pass or fail. Then check from the outside, which tells you what the rest of the internet sees:

Terminal

dig TXT example.com +short dig CNAME mn1._domainkey.example.com +short dig TXT _dmarc.example.com +short

The domain list shows a health badge. Green means every record verified. Yellow means partial, such as SPF passing and DKIM missing. Red means nothing verified, or records that used to be valid no longer are. Mailnaptic will not let you send campaigns or activate automations from a domain until SPF and DKIM both verify.

Propagation takes minutes at most providers and up to 48 hours at slow ones. If verification fails right after you publish, wait and retry before you change anything.

A real-world test

Send a message to a personal Gmail address, open the menu and choose Show original. SPF, DKIM and DMARC should each read PASS.

Moving DMARC from none to reject

A policy of p=none tells receivers to deliver everything and send you reports. It protects nothing yet, but it shows you every server that sends mail as your domain, which is exactly what you need to know before you enforce anything.

p=none

Monitor only. Stay here for two to four weeks and read the reports weekly.

p=none; rua=mailto:dmarc@example.com

p=quarantine

Failing mail goes to spam. Start with pct=25 and raise it to 100 as reports stay clean.

p=quarantine; pct=25

p=reject

Failing mail is refused. The goal once every legitimate sender passes.

p=reject; pct=100

In Mailnaptic, DMARC report monitoring (the DMARC Reports tab on the domain page) is available on Pro and above. It turns the daily XML into a table of pass and fail by source IP. Three things to look for:

  • Your own senders failing. That points to a DNS mistake.
  • Unknown IPs passing. Someone else may be using your domain, so investigate straight away.
  • Unknown IPs failing. That is DMARC doing its job.

Before quarantine, list every legitimate sender: staff mail, the support desk, the invoicing tool, the CRM. Each one needs to pass SPF or DKIM aligned with your domain, or it will start going to spam. The pct tag applies the policy to a share of failing mail, so a mistake costs you a fraction of the problem. Check reports weekly during setup, and monthly once you are at reject with clean results.

Optional: BIMI

Quarantine or reject is also the entry requirement for BIMI, which shows your logo next to your mail in supported inboxes. Gmail additionally asks for a Verified Mark Certificate. Treat it as a later project.

Common mistakes

  • Two SPF records. Merge every include into one.
  • Too many lookups. More than ten and SPF fails. Remove services you no longer use, or flatten the record.
  • Jumping to reject on day one. The helpdesk and invoicing mail you forgot about disappears.
  • Proxied DKIM records. They need to be DNS only.
  • A doubled domain name. Your DNS panel added it for you.
  • A report address nobody reads. Or one that does not exist, so reports bounce.
  • Verifying once and forgetting. Records vanish during DNS migrations and cleanups. A red badge on the Domains list is your cue.

Warm up the new domain

Authentication tells providers who you are. It does not tell them whether to trust you. A new domain that mails a whole list on day one looks like a spam operation, however clean its DNS.

Mailnaptic starts warmup with your first campaign and raises sending volume level by level. Each domain shows its current level and the next one. Your side is simple: send the first campaigns to your most engaged contacts, keep the content ordinary, and avoid a large import followed by an immediate blast.

Domains / Warmup (sample)

Warmup level

1

2

3

4

5

6

7

How to read it

Health score

Above 70

Healthy

40 to 69

Fair

Below 40

May pause progression

The health score comes from bounce rate, complaint rate and open engagement. If it sags, slow down instead of pushing through the next level. Run the blacklist check on the domain page too. Mailnaptic checks major lists such as Spamhaus ZEN and SpamCop and alerts you when a new listing appears.

Before your first campaign

SPF is one record and shows as verified

Both DKIM CNAMEs verify

The domain badge is green

DMARC is published at p=none with a report address someone reads

A test message shows SPF, DKIM and DMARC as PASS

The first send goes to engaged contacts only

A review of the DMARC reports is in the calendar for two to four weeks out

Try it in Mailnaptic

Add your domain and watch the records turn green

The Domains page lists every record to create, checks DNS live and shows which one is missing. Domain setup, warmup and blacklist checks have no plan restriction.