DMARC checker
Read a DMARC record in plain words, and see exactly what a receiver does with mail that fails.
Read the RUA XML your mailbox provider emailed you by source IP, in this tab, without uploading it.
Paste the XML from the report, or upload the .xml or .xml.gz file your mailbox provider sent as an attachment.
The result updates as you fill the form.
This DMARC aggregate report reader takes the RUA XML a mailbox provider emailed you — RFC 7489’s schema or RFC 9990’s newer one — groups every record by the IP that connected, and names the one line that matters: a source that passed neither SPF nor DKIM alignment, which is unauthenticated mail sent as your domain.
An aggregate report is the file behind the rua= tag in your DMARC record. A receiver that handled mail claiming to be from your domain sends one for a time window, as an .xml or .xml.gz attachment, and it holds one record per combination of connecting IP and authentication outcome: the source_ip, how many messages it sent (count), and what the receiver decided in policy_evaluated — the DKIM and SPF alignment results, and the disposition it applied.
There are two schemas in circulation, and this reads both. RFC 7489 Appendix C is the one every report in the wild uses, in the namespace http://dmarc.org/dmarc-xml/0.1. RFC 9990, published in May 2026, obsoletes it and uses urn:ietf:params:xml:ns:dmarc-2.0: it drops the pct element, makes envelope_from and the whole auth_results/spf element optional, requires a selector whenever a DKIM signature is reported, and adds pass as a disposition value meaning no action was taken under an enforcing policy. The namespace is what tells the two apart, and the result says which one it recognised.
The SPF and DKIM columns are the aligned results from policy_evaluated, not the bare authentication results further down each record. That is the distinction DMARC actually turns on: a message can carry a valid DKIM signature or a passing SPF check for some other domain entirely, and still fail DMARC because neither identifier aligned with the From domain a person sees.
Read the table as a list of senders. A source IP you recognise — your mail provider, your ESP, your invoicing app — should show pass in at least one of the two columns. A source showing fail in both sent mail that nothing authorised, and that is the finding above the table: either a sender of yours you never published, or someone sending as you. A source whose messages did not all get the same outcome shows its most common disposition with (mixed) beside it, and its SPF and DKIM cells break the counts out.
The report never leaves the browser. It is parsed here, in the page, with the text you pasted or the file you chose, and nothing is sent to a server — which is also why this tool cannot go and get the report for you.
Resell mailbox licences for the domains you just checked, under your own brand.
Get startedWhat people ask about this tool.
It arrives by email, as an attachment, at whatever address your DMARC record’s rua= tag points at. RFC 9990 §3.5.2 says the attachment is an XML file, gzip-compressed as application/gzip with the extension .xml.gz, or text/xml and .xml when it is not compressed. Save the attachment and paste its text here, or upload the file itself — .gz included, which is unzipped in your browser.
No. This is one of our instant tools: the parsing runs in the page itself, on every keystroke, with no network call of any kind. Choosing a file reads it in the browser and writes the text into the field exactly as a paste would, and a .gz is decompressed with the browser’s own DecompressionStream — you can open your network panel and watch nothing happen.
It means the receiver could not tie those messages to your domain by either mechanism, so DMARC treated them as unauthenticated. Every legitimate sender can be fixed — published in SPF, or signing with DKIM for your domain — so once the sources you recognise all pass, anything still failing is mail being sent as you by someone who cannot sign for you.
Because the two schemas disagree. RFC 7489 allowed only none, quarantine and reject; RFC 9990 added pass, meaning no action was taken on a message that passed DMARC under an enforcing policy. A none under the old schema and a pass under the new one can describe the same delivered message, which is why this tool tells you which schema it read.
No. A failure report (the ruf= tag) is a different format defined in RFC 9991, and an SMTP TLS report is JSON rather than XML. This reads aggregate reports only: XML whose root element is feedback, in either DMARC namespace. Anything else is reported as not being an aggregate report rather than parsed into numbers that would be wrong.
Every fixed value this page gives you comes from the provider’s own documentation. These pages change, so each one says the day it was last read here.
Read a DMARC record in plain words, and see exactly what a receiver does with mail that fails.
Build a DMARC record step by step, from monitoring through to full enforcement.
Company names and logos are trademarks of their owners, shown only to identify each service.