A DMARC failure does not necessarily mean SPF and DKIM both failed. DMARC requires at least one authentication mechanism to pass and align with the domain in the visible From: header.

On this page

Check the message headers

  1. Send a representative message from the affected application to a mailbox you control.
  2. Open the original message or view source option in your mail client. For Gmail, see View full headers. For Microsoft 365, see View internet message headers.
  3. Locate the visible From: address and the receiving system’s Authentication-Results: header.
  4. Record the SPF result and smtp.mailfrom domain, plus each DKIM result and its header.d domain.
  5. Record dmarc=pass or dmarc=fail if reported by the receiver. Treat headers added by untrusted intermediaries cautiously.

Example:

From: Alerts <alerts@example.com>
Authentication-Results: mx.receiver.example;
  spf=pass smtp.mailfrom=bounces.vendor.example;
  dkim=pass header.d=vendor.example;
  dmarc=fail header.from=example.com

Here both mechanisms pass authentication, but neither authenticated domain aligns with example.com.

Compare authenticated domains

For each mechanism, compare its authenticated domain with the visible From: domain:

MechanismDomain to compareCommon issue
SPFEnvelope sender / smtp.mailfrom domainVendor uses its own bounce domain
DKIMSigning domain in header.dVendor signs with its own domain

Under relaxed alignment, subdomains of the same organizational domain can align. Strict alignment requires exact domain equality. A message passes DMARC when either aligned SPF or aligned DKIM passes; both are not required.

Read DMARC alignment for examples.

Check the published DMARC policy

Query the TXT record at _dmarc.example.com, replacing the example domain with your own:

nslookup -type=TXT _dmarc.example.com

Expect a record beginning with v=DMARC1. For example:

v=DMARC1; p=none; rua=mailto:dmarc@example.com

If no record appears, check the exact DNS name and whether the domain inherits policy from its organizational domain. Multiple DMARC records at the same name are an error; consolidate them rather than publishing duplicates. DNS lookups alone cannot prove message alignment.

Fix common failures

SymptomWhat to investigateTypical correction
SPF passes, DMARC failssmtp.mailfrom is not alignedConfigure a supported custom return-path domain or aligned DKIM
DKIM passes, DMARC failsheader.d belongs to the vendorConfigure domain-specific DKIM signing
SPF fails after forwardingForwarder changes the sending IPPrefer a surviving aligned DKIM signature; assess forwarding and ARC behavior
Both failSender configuration, DNS, signing and message modificationVerify authorized senders, DNS and signatures
Only some messages failDifferent mail streams or subdomainsCompare headers for each source separately

Do not add arbitrary third-party IP addresses to SPF merely to silence DMARC failures. First identify the actual sending path and alignment requirement.

Retest safely

  1. Correct the sender configuration or DNS record.
  2. Allow for DNS caching and any vendor-side configuration delay.
  3. Send a new test message through the same workflow that failed.
  4. Recheck the receiving system’s Authentication-Results: and visible From:.
  5. Confirm dmarc=pass and check aggregate reports for other affected sources before tightening policy.

Changing p=reject to p=none is not a substitute for fixing alignment. A policy change may reduce rejection while troubleshooting, but it also reduces protection.