DMARC

No DMARC Record Found

"No DMARC Record Found" means no DMARC TXT record exists at _dmarc.yourdomain.com. Learn what triggers it and how to publish a valid DMARC record to fix it.

Updated Jul 1, 2026

The short answer

"No DMARC Record Found" means a domain has no DMARC policy published as a TXT record at _dmarc.yourdomain.com (and none inherited from its organizational domain), so receivers get no instruction on handling messages that fail authentication. Fix it by publishing a DMARC TXT record beginning with v=DMARC1; start in monitoring mode (p=none) with a rua= reporting address, then tighten to quarantine or reject.

"No DMARC Record Found" is a diagnostic result, not an SMTP reply code. It is returned by DMARC checkers, DNS-lookup tools, and mailbox-provider analyzers when a DNS query for your domain's DMARC policy comes back empty. Because DMARC (RFC 7489, obsoleted in May 2026 by RFC 9989 — together with companion RFCs 9990 and 9991 — which also moved DMARC to the Standards Track) is the policy layer that tells receivers what to do when SPF and DKIM fail, a missing record leaves your domain with no anti-spoofing instructions — and, increasingly, exposed to bulk-sender enforcement at Gmail and Yahoo.

What causes "No DMARC Record Found"?

A DMARC policy lives in a DNS TXT record at the reserved subdomain _dmarc.<your-domain> — for example.com, that is _dmarc.example.com (RFC 7489 §6.1). The checker reports "not found" when policy discovery returns zero usable records. Common reasons:

  • No record was ever published. The most common case — the domain simply has no _dmarc TXT record.
  • Record is on the wrong host. It was added to the root domain (example.com) or dmarc.example.com instead of _dmarc.example.com.
  • It does not start with v=DMARC1. RFC 7489 §6.6.3 says records that do not begin with the v= version tag are discarded, so a malformed record reads as "no record."
  • Multiple TXT records at _dmarc. If discovery finds more than one DMARC record at the name, processing terminates and no policy is applied (§6.6.3) — which many tools surface as "not found."
  • You checked a subdomain or sending host with no record of its own. A receiver first queries _dmarc.<subdomain>; if absent, it falls back to the Organizational Domain (derived via the Public Suffix List in RFC 7489). If neither has a record, the result is empty.
  • DNS has not propagated yet. A freshly added record may not be visible until caches expire.

Note that DMARCbis — published in May 2026 as RFC 9989, which obsoletes RFC 7489 and moves DMARC to the Standards Track — replaces the Public Suffix List fallback with a bounded DNS "tree walk" for finding the Organizational Domain. Because that specification is new, most deployed receivers still rely on the PSL-based behavior described in RFC 7489 today. Either way, the practical fix below is unchanged.

How do I fix "No DMARC Record Found"?

Publish a valid DMARC TXT record. Prerequisite: DMARC builds on SPF (RFC 7208) and DKIM (RFC 6376) — DMARC only passes when at least one of those is authenticated and aligned with your From: domain. Set up SPF and DKIM first, then add DMARC.

  1. Create the record. Start in monitoring mode so you learn who sends as your domain before enforcing anything:
Host/Name: _dmarc
Type: TXT
Value: v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com
  • v=DMARC1 — required version tag; must be first.
  • p=none — monitor only; take no action on failing mail (RFC 7489 §6.3). quarantine and reject are the enforcing alternatives.
  • rua=mailto:... — where aggregate XML reports are sent.

  • Publish it in your DNS. In your DNS provider, add the TXT record with the Name/Host set to _dmarc (the provider appends your domain). Paste the value exactly, save, and allow time for propagation.

  • Verify. Query it directly to confirm it resolves:

dig +short TXT _dmarc.yourdomain.com

You should see your v=DMARC1; p=none; ... string and exactly one DMARC record.

  1. Move toward enforcement. After reviewing aggregate reports and confirming all legitimate sources pass alignment, raise the policy to p=quarantine and then p=reject. You can also throttle enforcement gradually with pct= (e.g., pct=25) before going to pct=100. Use the sp= tag if subdomains need a different policy.

If you protect subdomains, remember the Organizational-Domain fallback: a record at _dmarc.example.com with no sp= applies to subdomains too, but publishing a per-subdomain _dmarc record overrides it.

Learn more in Courier's What is DMARC guide.

FAQ

Common questions

No. It is not an SMTP reply code (it has no 3-digit code per RFC 5321) and not an enhanced status code per RFC 3463. It is a DNS/diagnostic result reported by DMARC and authentication-checking tools when no DMARC TXT record exists at _dmarc.<domain> or its organizational domain.

One API, every provider

Stop debugging raw provider errors

Courier connects to your email, SMS, and push providers, handles retries and failover, and surfaces delivery errors in plain language.

Reply-code definitions per RFC 7489 §6.1, §6.6.3. Last reviewed Jul 1, 2026. Courier is not affiliated with third-party providers; error behavior may vary by implementation.