How to check the DMARC record for a domain

Type any domain to check how its DMARC record reads: the policy, each tag in plain words, and the default for every tag left out.

Try:

Only the domain is sent, to Cloudflare's public DNS resolver. Nothing is stored.

What each DMARC tag means

Reading a DMARC record

Where the DMARC record lives

The DMARC record is a TXT record at _dmarc under the domain, for example _dmarc.example.com. It starts with v=DMARC1. If that name has no record, receivers look at each parent name in turn, one label at a time. Two or more DMARC records at one name are all discarded. RFC 9989 replaced RFC 7489 as the DMARC standard in May 2026.

What p=none means

p=none states no preference about mail that fails DMARC. It still turns on the reports when rua is set. Gmail accepts p=none from senders of more than 5,000 messages a day to Gmail accounts, who must publish a DMARC record.

DMARC tags

v Version
Must be DMARC1 and must be the first tag. Otherwise receivers ignore the whole record.
p Policy
What the domain asks receivers to do with mail that fails DMARC. Without it, receivers treat the record as p=none. none: No preference is stated. quarantine: Failing mail is suspicious. reject: Failing mail is not valid use of the domain.
sp Subdomain policy
The policy for subdomains that exist. When it is missing, p applies to subdomains too. Default: same as p.
np Non-existent subdomain policy
The policy for subdomains that do not exist in DNS. When it is missing, sp applies, or p when sp is missing too. Default: same as sp, or p.
t Test mode
Says whether the domain is testing its policy. It does not change the reports. Default: n. y: Testing. Receivers apply one level below the stated policy. n: Apply the policy as stated.
psd Public suffix flag
Says whether the domain is a public suffix, a name under which others register their domains. Default: u. y: The domain is a public suffix. n: Not a public suffix. The domain is the organizational domain for itself and its subdomains. u: Not a public suffix. The lookup up the DNS tree decides the organizational domain.
rua Aggregate reports
Where receivers send summary reports, as a comma-separated list of addresses. Receivers only have to support mailto addresses. Without it, receivers send no aggregate reports. Default: no reports.
ruf Failure reports
Where receivers send a report about each failing message, as a comma-separated list of addresses. Without it, receivers send no failure reports. Default: no reports.
adkim DKIM alignment
How closely the DKIM signing domain must match the From domain. Default: r. r: Relaxed. The same organizational domain is enough. s: Strict. The exact same name.
aspf SPF alignment
How closely the SPF domain (the envelope sender) must match the From domain. Default: r. r: Relaxed. The same organizational domain is enough. s: Strict. The exact same name.
fo Failure report options
When to send a failure report. Ignored without ruf. Default: 0. 0: When every check fails to give an aligned pass. 1: When any check gives something other than an aligned pass. d: When a DKIM signature fails. s: When SPF fails.
pct Percentage (retired)
Retired by RFC 9989 and marked historic. Under RFC 7489 it was the share of failing mail the policy applied to. t=y is meant to work like pct=0, and t=n like pct=100.
rf Failure report format (retired)
Retired by RFC 9989 and marked historic.
ri Report interval (retired)
Retired by RFC 9989 and marked historic.

Reading an SPF record

One SPF record per domain

A domain may publish only one SPF record, the TXT record that starts with v=spf1. With two or more, receivers stop with permerror and SPF fails for every message. Merge every sender into one record.

What the sign before each term means

Each mechanism can start with a qualifier. With none, it is +. The qualifier of the first mechanism that matches the sending server is the result.

+ (or no sign)
pass. The server may send for the domain.
-
fail. The server may not send for the domain.
~
softfail. The server is probably not allowed.
?
neutral. The domain says nothing either way.

The all at the end

all matches every server, so it sets what happens to servers the record did not list. -all fails them and ~all soft fails them. +all (or a bare all) lets any server on the internet pass, and ?all says nothing. Terms after all are never checked. A record with no all and no redirect ends as neutral.

include and redirect

include checks another domain's SPF record and matches when that record passes. If the included domain has no SPF record, the whole check ends in permerror. redirect hands the check to another domain's record, and is ignored when the record has an all anywhere.

The SPF lookup limit of 10

At most 10 DNS lookups

Receivers count the terms that need a DNS lookup, across the record and every record it includes. include, a, mx, ptr, exists and redirect count. all, ip4, ip6 and exp do not. Past 10, the check returns permerror and SPF fails. Google also says a record can have up to 10 include tags.

Counts
include, a, mx, ptr, exists, redirect
Does not count
all, ip4, ip6, exp

At most 2 void lookups

A void lookup is a lookup that finds nothing, either an empty answer or a name that does not exist. Receivers should stop after two of them, with permerror. A stale include for a service you left is the usual cause.

An mx term may name at most 10 mail hosts

Checking one mx term must not look up more than 10 address records, so a domain with more than 10 MX hosts breaks an mx term that points at it.

Reading MX records

MX preference

Each MX record has a preference number. Senders try the lowest number first.

No MX record

With no MX record, senders deliver to the domain's own address record, as if it were an MX with preference 0.

Null MX

A single MX record with preference 0 and the host . says the domain accepts no email. Mail to it fails at once.

Mail hosts and gateways this tool recognises (11)
Google WorkspaceMail host
Google's business mail. The MX value is smtp.google.com with priority 1. Domains set up before 2023 may have older values that start with aspmx, which still work.
Microsoft 365 (Exchange Online)Mail host
Microsoft's business mail. The MX value is your MX token followed by .mail.protection.outlook.com. Microsoft is moving these hosts to subdomains under mx.microsoft, for domains that turn on DNSSEC and for part of new domains from July 1, 2026.
Zoho MailMail host
Zoho's mail service. The MX values are mx.zoho.com (10), mx2.zoho.com (20) and mx3.zoho.com (50). The ending after zoho changes with the data center that holds the account.
FastmailMail host
Fastmail's mail service. The MX values are in1-smtp.messagingengine.com (10) and in2-smtp.messagingengine.com (20).
Proton MailMail host
Proton's mail service. The MX values are mail.protonmail.ch (10) and mailsec.protonmail.ch (20).
iCloud Mail (custom domain)Mail host
Apple's mail service for a custom domain. The MX values are mx01.mail.icloud.com and mx02.mail.icloud.com, both priority 10.
Mailgun (inbound routes)Mail host
Mailgun receives mail for a domain that uses its inbound routes. The MX values are mxa.mailgun.org and mxb.mailgun.org, both priority 10.
Sophos EmailSecurity gateway
A mail security gateway. Mail reaches it first and it passes clean mail on. Its MX hosts end in prod.hydra.sophos.com (United States, Germany, Ireland) or in an eml100 subdomain of ctr.sophos.com (Canada, Australia, Japan, India, Brazil, UAE).
Cisco Secure Email Cloud GatewaySecurity gateway
A mail security gateway. Its MX hosts are named for the customer's allocation under iphmx.com, such as mx1.hc1234-49.iphmx.com.
Barracuda Email Gateway DefenseSecurity gateway
A mail security gateway. Its MX hosts end in ess.barracudanetworks.com.
Trend Micro Email SecuritySecurity gateway
A mail security gateway. Its MX hosts start with a company identifier and end in a regional name such as in.tmes.trendmicro.com, in.tmes.trendmicro.eu or in.tmems-jp.trendmicro.com.
SPF includes this tool recognises (15)
Google Workspace
Google Workspace's SPF value is v=spf1 include:_spf.google.com ~all.
Microsoft 365
Microsoft 365's SPF value is v=spf1 include:spf.protection.outlook.com -all.
Zoho Mail
Zoho Mail's SPF value is v=spf1 include:zohomail.com -all. Zoho suggests include:one.zoho.com when you use several Zoho services.
Fastmail
Fastmail's SPF value is v=spf1 include:spf.messagingengine.com ?all.
Proton Mail
Proton's SPF example includes _spf.protonmail.ch.
iCloud Mail (custom domain)
iCloud Mail's SPF value for a custom domain is v=spf1 include:icloud.com ~all.
Amazon SES
Amazon SES asks for v=spf1 include:amazonses.com ~all on a custom MAIL FROM domain, a subdomain used for bounces.
SendGrid
Twilio's sending service. Its SPF example is v=spf1 include:sendgrid.net -all.
Mailgun
Mailgun's SPF value is v=spf1 include:mailgun.org ~all.
Postmark
Postmark's include is spf.mtasv.net. Postmark says it is no longer needed in your own record, because its custom Return-Path covers SPF.
HubSpot
HubSpot's SPF includes are shared.hubspot.com, or an account-specific name under hubspotemail.net such as 123456.spf03.hubspotemail.net.
Zendesk
Zendesk's SPF value is v=spf1 include:mail.zendesk.com -all.
Mailchimp
Mailchimp sends from servers whose names contain mcsv.net. Microsoft's SPF example for a domain that sends with Mailchimp includes servers.mcsv.net.
Sophos Email
Sophos gives a regional SPF domain, such as _spf_uswest2.prod.hydra.sophos.com. It warns that the older _spf.prod.hydra.sophos.com can cause the SPF error too many DNS lookups.
Cisco Secure Email Cloud Gateway
Cisco's SPF uses an exists term with a macro under the allocation's iphmx.com name, such as exists:%{i}.spf.hc1234-49.iphmx.com.
Verification records this tool recognises (7)
Google (Search Console or Google Workspace)
Google's verification record looks like google-site-verification= followed by a code.
Microsoft 365
Microsoft 365's verification record looks like MS=ms followed by digits.
Zoho Mail
Zoho Mail's verification record looks like zoho-verification= followed by a code ending in zmverify.zoho.
Proton Mail
Proton's verification record looks like protonmail-verification= followed by a code.
Apple Business
Apple's verification record looks like apple-domain-verification= followed by a code.
Webex (Control Hub)
Webex checks a cisco-ci-domain-verification entry in the domain's TXT records.
Yandex Webmaster
Yandex's verification record looks like yandex-verification followed by a code.
Photo of Utku Zihnioglu

By

ยท CEO & co-founder

Published Nov 11, 2026

Shorter page: the tool first, the answer in a few lines.

Here is how to check the DMARC record for a domain: look up the TXT record at _dmarc in front of the domain, such as _dmarc.cleardue.example, and keep the one that starts with v=DMARC1. Type the domain above and the tool runs that lookup, then reads the policy and every tag back in plain words, including the defaults of the tags you left out.

Only the domain is sent, to Cloudflare's public DNS resolver, and nothing is stored.

How to read the result

Start with the policy. p=quarantine asks receivers to treat mail that fails DMARC as suspicious, and p=reject asks them to refuse it. A t=y tag beside either means the policy is still under test, and receivers apply one level below it.

Then check for a report address. A record with no rua tag sends you nothing, and the summary reports are where you find every service sending as your domain.

A tag the current standard does not define is ignored by receivers. That standard is RFC 9989, which replaced the older DMARC RFC in May 2026 and retired the pct tag, so an older record may still carry it.

Checking a DMARC record in Office 365

Microsoft 365 has no admin page that manages DMARC for a custom domain. Microsoft's guide to setting up DMARC in Microsoft 365 says the record lives at your DNS host, so the check is the same public lookup. Only the onmicrosoft.com domain's record is added in the Microsoft 365 admin center.

Microsoft 365 sends summary reports to a rua address but never failure reports, so a quiet ruf mailbox is not a broken record.

What to do next

Tighten the policy in steps: p=none with a report address, then quarantine, then reject. Between steps, fix each service the reports show failing, and check the domain again after every change.

Then send a test message from each service and paste its headers into the email header analyzer to see whether DMARC passed as the receiver saw it. If mail already bounces under a reject policy, start with the 550 5.7.0 DMARC policy violation page.

How to check the DMARC record for a domain: questions

How do I check a DMARC record by hand?

Run nslookup -type=TXT _dmarc.cleardue.example or dig TXT _dmarc.cleardue.example +short, with your domain in place of cleardue.example. You get the raw text only, so you need to know what every missing tag defaults to.

Does p=none protect my domain from spoofing?

Not on its own. p=none states no preference about mail that fails DMARC, so receivers treat spoofed mail as their own filters decide. Its value is the reports, which show who sends as your domain before you move to quarantine or reject.

Can a domain have two DMARC records?

No. When one name has more than one DMARC record, receivers discard them all, as if the name had none, so your policy stops applying. Keep one record at _dmarc and merge any tags you need into it.

Why does the check find no DMARC record for my subdomain?

Most subdomains do not have one. Receivers then look for a record at each parent name in turn, so check the parent domain too. A subdomain needs its own record only when it should follow a different policy.

Does DMARC replace SPF and DKIM?

No, it builds on them. Mail passes DMARC when SPF or DKIM passes for a domain that matches the From address. The record only says what the domain asks receivers to do when neither does, and where to send reports.

About this article

Photo of Utku Zihnioglu

Utku Zihnioglu

CEO & co-founder

Serial entrepreneur who built infrastructure companies handling billions of requests. Now leads engineering at Oneprofile, which finds the people worth talking to, researches each one, and follows up until they reply.

Drafted with AI from our product docs and code. Utku Zihnioglu answers for what it says.

Check your domain before the first send

Then verify every address on your list in Oneprofile before the first email goes out.

Free plan: 200 credits a month, 3 integrations, no card

Check your domain before the first send

Then verify every address on your list in Oneprofile before the first email goes out.

Free plan: 200 credits a month, 3 integrations, no card