DNSVerdictAll toolsGuidesHow it works

How to set up a DMARC record, from p=none to p=reject

Published · Updated

DMARC is one TXT record at _dmarc.yourdomain that tells receivers what to do with mail that fails SPF and DKIM alignment, and where to send reports. Start with a monitoring record, read the reports for a few weeks, fix every legitimate sender that fails, then move to quarantine and reject:

_dmarc.example.com.  3600  IN  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]"

Before publishing, SPF or DKIM must already work for each service that sends as your domain. DMARC only passes when one of them passes and aligns with the From: domain; see DMARC fails although SPF and DKIM pass. Publish the record and run the DMARC checker to see how receivers will read it.

A note on the standard: this guide cites RFC 7489, the specification receivers have implemented for years. The RFC Editor now marks it as obsoleted by RFC 9989, which, among other changes, removes the pct tag and adds t (test mode) and np (policy for non-existent subdomains). The core tags below work the same way, and unknown tags are ignored by receivers.

Tags

The record is a list of tag=value pairs separated by semicolons. v=DMARC1 must come first and p second (RFC 7489 §6.3).

TagPurposeValues / default
vVersion; must be the first tagDMARC1
pPolicy for the domain; requirednone, quarantine, reject
spPolicy for subdomainssame values; defaults to p
ruaWhere aggregate reports gomailto: URIs, comma-separated
rufWhere failure reports gomailto: URIs; many receivers do not send them
pctPercentage of failing mail the policy applies to0-100; default 100
adkim, aspfDKIM / SPF alignment moder relaxed (default), s strict
foWhen to generate failure reports0 (default), 1, d, s, colon-separated

Practical notes: sp matters if your marketing mail comes from a subdomain; leave it out to inherit p. ruf reports can contain message content, which creates a privacy question, so most senders publish rua only. Leave adkim and aspf relaxed unless you control every subdomain.

Rollout: none, quarantine, reject

  1. p=none with rua: nothing is blocked. Collect aggregate reports for two to four weeks, long enough to see monthly senders such as invoicing.
  2. Fix failing sources: for every legitimate source in the reports, enable custom DKIM or a custom return-path so it aligns. Remove sources you do not recognize.
  3. p=quarantine; pct=10, then raise pct stepwise to 100. Failing mail goes to spam for the sampled fraction. (If a receiver follows RFC 9989, pct is ignored and the full policy applies, so test with a low-risk domain first.)
  4. p=reject once reports show no legitimate failures. Receivers may refuse failing mail during the SMTP transaction.

Risk of p=reject: it blocks forwarded mail that breaks SPF and mailing-list mail that breaks DKIM, and it blocks any sender you forgot. Staying at p=none is safe but gives no protection against spoofing. Mail rejected before you notice is not redelivered, so move slowly and keep reading the reports after each step.

Receiving reports at another domain

If rua=mailto:[email protected] points outside the domain that publishes the record, the report receiver must authorize it, or senders may drop the address (RFC 7489 §7.1). Publish a TXT record at <yourdomain>._report._dmarc.<receiver-domain> containing v=DMARC1:

example.com._report._dmarc.other.example.  IN  TXT  "v=DMARC1"

If you use a DMARC monitoring service, it tells you the exact rua address. When the report mailbox is on your own domain, nothing extra is needed. Without the authorization record, reports for that destination are normally not delivered, and your mailbox stays empty with no error.

Pitfalls

FAQ

Do I need DMARC if I only send a few emails? Check the requirements of the mailbox providers you send to; some publish DMARC requirements for senders. A p=none record costs nothing and also gives you the reports.

How long until the reports arrive? Receivers typically send aggregate reports once a day, as XML attachments, after they have seen mail from your domain.

Can I set p=reject right away? You can; the record is valid. The risk is blocking your own forwarded mail and forgotten senders, since you have not yet seen who sends as you.

Sources

Tools used

DMARC Record CheckerSPF Record CheckerEmail Provider Setup Check