Notix
Learn

DMARC: the record that says what to do when SPF and DKIM fail.

SPF and DKIM each prove something about a message. DMARC ties that proof to the address the recipient actually sees, tells receivers what to do when it is missing, and sends you reports about who is using your domain. It lives in one TXT record at _dmarc.yourdomain.com. This page explains the record and its tags with three worked examples; the step-by-step setup for all three records is on SPF, DKIM and DMARC setup.

What DMARC adds over SPF and DKIM.

SPF lists the servers allowed to send for a domain, but the domain it checks is the one in the bounce address, which the recipient never sees. DKIM signs the message with a key published under a domain, but that domain can be anything the signer controls. A phisher can pass both, with their own bounce domain and their own signature, while the From header still says billing@acme.com.

DMARC closes that gap with one rule called alignment: the domain that passed SPF, or the domain in the DKIM signature, must match the domain in the visible From header. A message passes DMARC when at least one of the two passes and aligns. When neither does, the record’s policy tells the receiver what to do, and the record’s reporting address tells them where to send the daily summary of what they saw.

That reporting is the part most guides skip. Before DMARC you have no way to know who is sending as your domain. After a week on the weakest policy you have a list of every source, the share of mail that aligned, and the sources that did not.

Three records, one for each stage.

Each is a single TXT record at _dmarc under the domain. Replace acme.com and the reporting address with your own; the reporting mailbox must exist and be able to receive XML attachments, or be an address a DMARC reporting service gives you.

Stage one: monitor only. Nothing is blocked; reports arrive daily.
_dmarc.acme.com.  IN  TXT  "v=DMARC1; p=none; rua=mailto:dmarc-reports@acme.com"

This is where every domain should start. p=none changes nothing about delivery. The rua address is what makes it worth publishing: without it you have a record that satisfies a checklist and teaches you nothing.

Stage two: a quarter of failing mail goes to spam.
_dmarc.acme.com.  IN  TXT  "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc-reports@acme.com"

pct=25 applies the quarantine policy to a quarter of the mail that fails; the other three quarters are treated as none. Raise it to 50, then 100, as the reports stay clean. Quarantine in practice means the spam folder, so a forgotten sending source shows up as complaints from colleagues rather than as lost mail.

Stage three: enforce, including subdomains, with strict alignment.
_dmarc.acme.com.  IN  TXT  "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:dmarc-reports@acme.com"

p=reject refuses failing mail during the SMTP conversation. sp=reject extends that to subdomains you have not published their own record for, which is where lookalike sending usually moves once the apex is protected. adkim=s and aspf=s require an exact domain match rather than a subdomain; leave them relaxed if you send from mail.acme.com with a From address at acme.com, or the mail stops.

Every tag, and what it defaults to.

TagMeaningNotes
vVersion. Always DMARC1.Must be the first tag or the record is ignored.
pPolicy for mail that fails: none, quarantine or reject.The only other required tag. Start at none.
spPolicy for subdomains.Defaults to the value of p. Set it explicitly once you know which subdomains send.
ruaWhere aggregate reports go, as a mailto: address.Daily XML summaries per sending source. This is the tag that makes p=none useful.
rufWhere forensic reports go.Per-message failure samples. Few providers send them; most senders leave it out.
pctShare of failing mail the policy applies to, 0 to 100.Defaults to 100. Lets you roll out quarantine or reject to a fraction first.
adkimDKIM alignment: r (relaxed) or s (strict).Relaxed accepts a subdomain of the From domain; strict wants an exact match. Defaults to r.
aspfSPF alignment: r (relaxed) or s (strict).Same rule for the SPF domain. Defaults to r.

Reading the aggregate reports.

Each receiver that supports reporting sends one XML file a day to the rua address. Inside, the mail is grouped by sending IP address, and each group carries the count, the SPF and DKIM results, and whether each aligned with the From domain. Raw XML is readable in an emergency and unpleasant otherwise; a free DMARC report viewer turns a month of it into a table of sources.

The question to ask of the table is simple: is every source that passes one you recognise, and is every source that fails one you do not? A legitimate source that fails is a sending service you never set records for, a marketing tool using its own domain for SPF, or a subdomain nobody told you about. Fix those first. A source you do not recognise that fails is what DMARC exists to stop; when only those remain, tighten the policy.

Move from none to quarantine when the reports have shown nothing legitimate failing for a few weeks. Move from quarantine to reject when nothing you care about has landed in spam since. Keep the rua tag at every stage; the reports do not stop being useful once the policy is strict.

Why Notix recommends starting at none.

When you add a domain to Notix, the setup lists the DKIM, SPF and MX records the domain needs to verify, and a fourth record marked recommended rather than required: a DMARC record with the value v=DMARC1; p=none;. It is deliberately the weakest form. A domain that has just started sending has no report history and often has other senders attached to it: Google Workspace, a help desk, a marketing tool. A strict policy on day one would quarantine those before anyone knew they existed. p=none satisfies the mailbox providers that ask for a record, costs nothing, and starts the reports. Add a rua address to it and tighten on evidence.

Mail sent through Notix aligns either way. Every message is signed with DKIM under your own domain, using the notix selector from your setup, so the DKIM domain matches your From address and the message passes DMARC at any policy. The missing record is also one of the warnings the pre-send check raises, so a domain without one is flagged before a campaign, not after.

What Gmail and Yahoo require.

Since 1 February 2024 Google’s sender guidelines require anyone sending 5,000 or more messages a day to Gmail addresses to authenticate with both SPF and DKIM, publish a DMARC record, align the From domain with SPF or DKIM, support one-click unsubscribe on marketing mail and keep the spam rate reported in Postmaster Tools below 0.3%. On the DMARC policy the guidance is explicit that the enforcement policy can be set to none. Yahoo’s sender requirements ask for the same: both SPF and DKIM, a DMARC policy of at least p=none that passes, one-click unsubscribe and a spam rate below 0.3%. Below the bulk threshold a DMARC record is not mandatory, but every mailbox provider treats its presence as a signal that the domain is looked after.

FAQ

Questions, answered.

What is a DMARC record example I can copy?
For a domain that has just started sending: v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com, published as a TXT record at _dmarc.yourdomain.com. It enforces nothing and asks mailbox providers to send you daily reports on who is sending as your domain. Once the reports show only your own services passing, move to p=quarantine with pct=25, then raise pct, then p=reject.
Do I need DMARC if I already have SPF and DKIM?
For deliverability, yes. Since February 2024 Google requires bulk senders, meaning 5,000 or more messages a day to Gmail, to publish a DMARC record, and states that the enforcement policy can be set to none. Yahoo asks for at least p=none as well. Below that volume DMARC is not mandatory, but a missing record is one of the warnings Notix's pre-send check raises, and receivers treat its absence as a small negative signal.
What is the difference between p=none, p=quarantine and p=reject?
They tell a receiver what to do with a message that fails DMARC. With none, deliver it anyway and just report. With quarantine, treat it as suspicious, which in practice means the spam folder. With reject, refuse it at the SMTP level so it never reaches a mailbox. None is for learning who sends as you; quarantine and reject are for stopping everyone else.
What does DMARC alignment mean?
SPF and DKIM each pass or fail against a domain, but not necessarily the one the recipient sees in the From header. Alignment is the extra check DMARC adds: the domain that passed SPF, or the domain in the DKIM signature, must match the From domain. Relaxed alignment accepts a subdomain; strict requires the exact domain. A message passes DMARC when at least one of SPF or DKIM passes and is aligned.
Will DMARC break email sent through Notix?
No, as long as your domain is verified. Notix signs every message with DKIM under your own domain using the notix selector, so the DKIM domain aligns with your From address and the message passes DMARC even at p=reject. The SPF include in the setup covers the bounce path. What DMARC will catch is anything else sending as your domain without your records, which is the point.
How long should I stay on p=none?
Until the aggregate reports have been quiet for a few weeks: every legitimate source (your app, your marketing tool, your help desk, Google Workspace) passes and aligns, and the only failures are sources you do not recognise. For most small teams that is two to four weeks. Then quarantine at a low pct, watch the reports again, and only move to reject when nothing legitimate is failing.

Verify a domain and the records are listed for you.

DKIM, SPF, MX and the recommended DMARC record, checked automatically once they resolve.