A DMARC record with p=none tells receivers to watch and report, nothing more. Mail that forges your domain in the From line is still delivered as if no policy existed. Moving to p=quarantine and then p=reject asks receivers to send that mail to spam or refuse it outright, but the same request also hits any legitimate service you forgot about: the invoicing tool, the support desk, the CRM that sends quotes from your domain.
This guide walks through the safe path: reading aggregate (rua) reports, building a complete list of senders, choosing between relaxed and strict alignment, staging the change with t=y now that the current standard has removed pct, setting subdomain policy with sp and np, a realistic timeline, what to do when legitimate mail fails, and how to check what is actually published. All domains, IP addresses and selectors are examples.
Scope of this guide
The free SPF and DMARC checker and the Launch Readiness Snapshot read public DNS records on the exact hostname you enter. They flag a missing DMARC record or p=none, but do not read your reports or evaluate sp, np, t, pct or alignment, and they are not a pentest.
1. What p=none, quarantine and reject ask receivers to do
The p tag in the DMARC record at _dmarc.example.com states what you would like receivers to do with mail whose From domain fails DMARC, meaning that neither SPF nor DKIM passed for a domain aligned with it. It is a request. RFC 9989, the DMARC standard published in May 2026 that replaces RFC 7489, leaves the final decision to each receiver’s local policy.
| Policy | Receivers are asked to | A legitimate sender you missed | Typical use |
|---|---|---|---|
p=none | Change nothing in mail handling and only report | Delivered as before; failures appear in reports | Monitoring while you find and fix senders |
p=quarantine | Treat failing mail as suspicious, usually by filing it as spam or holding it for closer inspection | Lands in spam folders; recipients may never see it | First enforcement stage |
p=reject | Refuse failing mail during the SMTP transaction with a permanent 5xx error | Bounced; the sending service receives a non-delivery notice | Final stage for domains where every source is aligned and signed with DKIM |
Two points shape the rollout. First, p=none protects nothing on its own; it produces reports, and only if the record has a rua address. Second, receivers do not all enforce in the same way. RFC 9989 tells them not to reject solely because a policy says reject, and some quarantine such mail instead, so one policy change can look different at different mailbox providers. Plan the move as a sequence of small, reversible steps rather than one switch.
The large mailbox providers already ask bulk senders for a DMARC record but accept p=none. The SPF and DMARC check guide lists their requirements and explains every tag of the record.
2. How to read DMARC aggregate (rua) reports
Aggregate reports are what make a safe move possible. Add a reporting address to the record, for example rua=mailto:dmarc-reports@example.com, and receivers that send reports will mail you a compressed XML file, typically covering one UTC day, listing every IP address that sent mail with your domain in the From line and how that mail fared. The format is defined in RFC 9990. A file name such as receiver.example!example.com!1791590400!1791676800.xml.gz names the reporting receiver, your domain, and the start and end of the period as Unix timestamps.
Each <record> in the file groups messages by source and result. These fields matter most:
| Field | What it tells you | What to look for |
|---|---|---|
source_ip, count | The sending server and how many messages it sent in the period | Unfamiliar addresses with large counts; find out who operates them |
policy_evaluated: dkim, spf | The DMARC verdict per method: pass here means it passed and aligned | A legitimate source with fail in both will be hit by enforcement |
policy_evaluated: disposition | What the receiver did: none, pass, quarantine or reject | After a policy change, quarantine or reject on mail you recognize |
reason | Why the receiver deviated from your policy: local_policy, mailing_list, trusted_forwarder, policy_test_mode or other | Lists and forwarders that will need DKIM to get through |
identifiers: header_from, envelope_from | The From domain and the envelope sender (Return-Path) domain | An envelope domain that belongs to a provider rather than to you |
auth_results: dkim and spf | The raw results before alignment, with the signing domain, selector and SPF domain | DKIM passing for the provider’s own domain instead of yours |
The difference between the last row and policy_evaluated is the most useful thing to learn. A newsletter platform can show a DKIM pass in auth_results for mailer.example.net and still fail DMARC, because that domain does not align with example.com. Only policy_evaluated tells you what DMARC concluded.
Read reports over several weeks, not one day: monthly invoices, quarterly newsletters and annual renewal notices arrive on their own schedules. At any volume, raw XML is tedious; a parser or reporting tool that groups rows by source, alignment and disposition per day makes the review practical. Not every receiver sends aggregate reports, so a quiet week does not mean a quiet domain. If the rua address sits at another organizational domain, that domain must publish an authorization record such as example.com._report._dmarc.reports.example.net starting with v=DMARC1, or receivers ignore the address (RFC 9990, section 4).
3. Find every legitimate sender before you enforce
Enforcement is safe only when you know every system that puts your domain in the From line. Build the list from two directions: what the organization uses, and what the reports show. Typical sources:
- The mailbox platform your staff use every day.
- Marketing and newsletters, including an old campaign tool someone still logs into.
- Transactional mail from your application: sign-up confirmations, password resets, receipts.
- Business tools: CRM, invoicing and billing, support desk, HR and recruiting, calendar and e-signature services.
- Website forms and plugins that send as
noreply@example.com. - Devices and scripts: scanners, monitoring alerts, scheduled jobs and on-premises relays.
Then match every source in the reports to an entry on the list. A reverse lookup of the IP address (dig +short -x 192.0.2.10) often names the provider, and the provider’s documentation explains the SPF include and DKIM setup it supports. Keep the result in a table like this one:
| Source | Evidence in the reports | Aligned SPF | Aligned DKIM | Action |
|---|---|---|---|---|
| Staff mailbox platform | Provider addresses, DKIM d=example.com | Yes | Yes | None |
| Newsletter platform | Envelope domain and DKIM at mailer.example.net | No | No | Set up DKIM signing with d=example.com |
| Billing system | Own server address, no DKIM signature | Yes | No | Add DKIM; SPF alone breaks on forwarding |
| Website contact form | Web server address, envelope at the hosting company’s domain | No | No | Send through an authenticated relay or mail provider |
| Unknown | Many addresses, small counts, unrelated envelope domains | No | No | Probably forged: leave it failing |
The last row is the point of the exercise. Once every known source passes, what still fails is mostly forged or misconfigured mail, and that is exactly what enforcement should stop. Sources that send rarely are the ones most often missed, so ask finance, HR and support which tools they use before you trust a quiet month.
4. SPF and DKIM alignment: relaxed or strict
DMARC passes when SPF or DKIM passes and the domain it passed for is aligned with the From domain. One aligned pass is enough. For SPF the domain checked is the envelope sender (RFC 7208); for DKIM it is the d= value of a valid signature (RFC 6376). The aspf and adkim tags set how close the match must be:
- Relaxed (
r, the default): both domains share the same organizational domain, sobounce.example.comandnews.example.comalign withexample.com. - Strict (
s): the domains must be identical.
RFC 9989 determines the organizational domain with a DNS Tree Walk, querying _dmarc records from the full name upward, instead of the public suffix list that RFC 7489 relied on.
| From domain | SPF passes for | DKIM d= | Relaxed | Strict |
|---|---|---|---|---|
example.com | bounce.example.com | none | Aligned through SPF | Not aligned |
news.example.com | example.com | news.example.com | Aligned through SPF and DKIM | Aligned through DKIM only |
example.com | mailer.example.net | mailer.example.net | Not aligned | Not aligned |
example.com | nothing (forwarded, SPF fails) | example.com | Aligned through DKIM | Aligned through DKIM |
RFC 9989 observes that nearly all domain owners find relaxed alignment sufficient. Strict alignment breaks the common pattern of a dedicated bounce subdomain per provider, so keep the default unless you have a specific reason, for example subdomains delegated to vendors, where relaxed alignment would let mail authenticated for vendor.example.com pass for example.com. Whatever you choose, make DKIM the aligned method for every source. SPF breaks when mail is forwarded, because the forwarding server is not in your record; a DKIM signature generally survives forwarding as long as the message is not modified.
5. Staged rollout: pct is gone, use t=y
Older guides stage enforcement with pct: p=quarantine; pct=10, then 25, 50 and 100, so that the policy covers a growing sample of failing mail. Under RFC 7489, mail outside the sample received the next lower policy. RFC 9989 removed the tag; its Appendix A.6 explains that values other than 0 and 100 were usually not applied accurately and that the inaccuracy varied widely between implementations.
The removal has a sharp edge. RFC 9989 tells receivers to ignore tags they do not know, so a receiver that follows the new standard reads p=quarantine; pct=25 as plain p=quarantine and applies it to all failing mail. A partial pct can no longer be relied on to limit the impact.
The replacement is the test flag t. With t=y, receivers are asked to apply one level below the published policy: p=quarantine; t=y is handled like none, and p=reject; t=y like quarantine. Reports continue as usual, and a receiver can record the deviation with the reason policy_test_mode. RFC 9989 describes t=y and t=n as the counterparts of pct=0 and pct=100.
During the transition some receivers still implement only RFC 7489 and ignore t, while newer ones ignore pct. Because pct=0 under the old rules and t=y under the new ones ask for the same handling, you can publish both while testing:
v=DMARC1; p=quarantine; t=y; pct=0; rua=mailto:dmarc-reports@example.comWatch the reports for a few weeks, then remove both tags so that p=quarantine applies in full. Repeat the pattern before reject: p=reject; t=y; pct=0 asks receivers to quarantine, and removing the two tags turns on reject.
You can also stage by mail stream instead of by percentage. A subdomain such as news.example.com can carry its own DMARC record and move to enforcement earlier or later than the main domain; RFC 9989’s own deployment example tests p=quarantine with t=y on a subdomain before tightening further.
6. Subdomain policy: sp and np
A DMARC record on example.com also covers subdomains that have no _dmarc record of their own. Two tags let the subdomain policy differ from p:
| Setting | Applies to | If it is absent | Example use |
|---|---|---|---|
sp | Existing subdomains without their own record | p applies | p=reject; sp=quarantine while subdomain senders are still being fixed |
np | Subdomains that do not exist in DNS | sp applies, otherwise p | np=reject early, because a name that does not exist sends no legitimate mail |
A subdomain’s own _dmarc record | That subdomain | The parent record’s sp or p applies | A marketing subdomain on its own schedule |
A few rules keep this predictable. sp is meaningful only in the record at the organizational domain; a subdomain that publishes its own record is governed by that record’s p. Setting np=reject while p is still at none is a low-risk early step: forged mail from invented names such as billing-support.example.com is refused, and receivers that do not support np simply fall back to sp or p. Before you rely on it, make sure every subdomain you actually send from has at least one DNS record, so that it counts as existing. And remember that SPF is not inherited: each name used as an envelope sender needs its own SPF record, whatever the DMARC policy says.
7. A realistic timeline from p=none to p=reject
No timeline fits every domain, and RFC 9989 warns that it may take many months of reports before a domain owner is ready to enforce. For domains whose users post to mailing lists, it suggests at least a month at p=none and an equally long period at p=quarantine, comparing the results, and even then it says such domains should not publish reject. An organization with a handful of sending services might plan like this:
| Phase | Record (simplified) | Typical length | Move on when |
|---|---|---|---|
| Inventory and monitoring | p=none; rua=… | 4–8 weeks | Every known source passes with aligned DKIM; what still fails is unknown or forged |
| Quarantine test | p=quarantine; t=y; pct=0 | 2–4 weeks | No new legitimate sources appear in the reports |
| Quarantine | p=quarantine | 4 weeks or more | No reports of missing mail; dispositions match expectations |
| Reject test | p=reject; t=y; pct=0 | 2–4 weeks | Forwarded and list mail still passes through DKIM |
| Reject | p=reject | Ongoing | Review reports at least monthly and whenever a new tool starts sending |
Before each change, lower the TTL of the _dmarc TXT record, for example to 300 seconds, at least one old TTL period in advance, so that a rollback reaches resolvers quickly. Change the record early in the week, tell the support team what to watch for, and keep a dated log of every value you publish. RFC 9989 requires any domain that publishes p=reject to sign its mail with valid DKIM signatures rather than rely on SPF alone. Reject is not the only good end state: for a domain your staff use on mailing lists, a well-monitored quarantine can be the better choice, while a domain used only for invoices and notifications is a strong candidate for reject.
8. When legitimate mail fails: diagnose, fix, roll back
Sooner or later a report or a colleague will show legitimate mail failing. Find the matching rows in the aggregate reports, or ask for the full headers of an affected message and read its Authentication-Results header, then compare the pattern:
| Symptom | Likely cause | Fix |
|---|---|---|
| SPF passes for the provider’s domain, no DKIM for yours | The service uses its own envelope and signing domain | Turn on custom DKIM in the service, publish its selector under example.com and, if offered, a custom bounce subdomain |
| DKIM fails for a known selector | Key rotated or removed, record truncated, or the message altered after signing | Republish the key from the provider and check the TXT record at selector._domainkey.example.com |
SPF permerror | More than 10 DNS-querying terms, or two SPF records on one name | Remove unused includes and merge records, as the SPF record guide explains |
| Fails only for some recipients | Forwarding: the forwarder’s address is not in your SPF record | Rely on aligned DKIM, which generally survives forwarding |
| Fails on a mailing list | The list edited the subject or body and broke the DKIM signature | Lists that rewrite the From address avoid the failure; consider staying at quarantine on list-heavy domains |
| Internal alerts or a scanner fail | The device sends directly without authentication | Route it through an authenticated relay or a provider that signs with your domain |
If the failure is large, or it hits revenue mail such as receipts and password resets, roll back first and investigate second: add t=y and pct=0, or return to the previous policy. With a short TTL the change reaches most resolvers within minutes. A 5xx rejection is permanent, so mail that was already rejected is not delivered later; tell the affected team which messages to send again. Then fix the source, watch it pass in a few days of reports and step forward again. Forwarders and lists that preserve authentication results with ARC (RFC 8617) can help, but RFC 9989 notes that no such mechanism is widely used yet, so DKIM on every source remains the dependable fix.
9. How to check the published DMARC record
Check what is actually published, not what the DNS dashboard shows:
dig +short TXT _dmarc.example.com
nslookup -type=TXT _dmarc.example.com
dig +short NS example.com
dig +short TXT _dmarc.example.com @ns1.example.netThe first two lines show what resolvers return; the last one queries an authoritative server directly, which shows a change before cached answers expire. Confirm that:
- exactly one TXT record at
_dmarcstarts withv=DMARC1; when there are two, receivers discard both and the domain behaves as if it had no DMARC record; v=DMARC1is the first tag andpholdsnone,quarantineorreject;- the
ruamailbox exists and, if it is at another domain, is authorized with a_report._dmarcrecord; - tags are separated by semicolons, with no typographic quotes or stray characters pasted from a document.
Then send a message from each sending service to a mailbox you control and read the Authentication-Results header: dmarc=pass together with your From domain is the receiver’s verdict, and it is the one that counts.
For a quick outside view, the free SPF and DMARC record checker reads the _dmarc record on the exact hostname you enter, with no fallback to the parent domain. It flags a missing record (medium, when the host has MX records) and p=none (low, as monitoring mode); quarantine and reject raise no signal. It does not read your reports or evaluate sp, np, t, pct, rua or alignment. The same mail DNS check also reads SPF, MTA-STS and CAA, and it is one of the eight passive checks in the free Launch Readiness Snapshot, which needs no signup and returns a score with a result for each check. For an ongoing review routine, see the DNS and email security guide.
Common questions
What is the difference between DMARC quarantine and reject?
p=quarantine asks receivers to treat failing mail as suspicious, which usually means the spam folder. p=reject asks them to refuse it during the SMTP transaction, so it is never delivered and the sending service gets a bounce. Receivers make the final decision, and some quarantine mail even under p=reject.
How long should I stay at p=none before moving to quarantine?
Until every legitimate source passes with alignment, which usually takes at least four to eight weeks of reports so that monthly and occasional mail shows up. For domains whose users post to mailing lists, RFC 9989 suggests at least a month at none and as long again at quarantine.
Can I still use pct=10 or pct=50 to phase in DMARC?
Not reliably. RFC 9989 removed pct because partial values were applied inconsistently, and receivers that follow it ignore the tag and apply the full policy. Use t=y for a test phase, together with pct=0 for receivers that still follow RFC 7489.
Should I use strict alignment with adkim=s and aspf=s?
Usually not. Relaxed alignment, the default, accepts any subdomain of your organizational domain, which setups with bounce subdomains need. Strict alignment makes sense mainly when subdomains are run by vendors whose mail should not pass for the main domain.
What does sp= do in a DMARC record?
sp sets the policy for existing subdomains that have no DMARC record of their own, and np covers subdomains that do not exist in DNS. Without them, subdomains get the p policy. A subdomain with its own _dmarc record follows that record instead.
Does p=reject stop all phishing that uses my brand?
No. It asks receivers to refuse mail that forges your exact domain in the From line. Lookalike domains, misleading display names and compromised accounts are outside what DMARC checks, so keep reading the reports and listen to what recipients forward to you.
Sources & further reading
- RFC 9989: DMARCwww.rfc-editor.org
- RFC 9990: DMARC aggregate reportingwww.rfc-editor.org
- RFC 7489: DMARC (obsoleted; defined the pct tag)www.rfc-editor.org
- RFC 7208: Sender Policy Framework (SPF)www.rfc-editor.org
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatureswww.rfc-editor.org
- RFC 8617: Authenticated Received Chain (ARC)www.rfc-editor.org
- dmarc.org: DMARC overviewdmarc.org
Prepared by the Sitelemetry editorial team. Explore the linked sources for further detail.



