SSL Checker DMARC Meta Tags Site Speed Broken Links AI Chat Bookings Try ModusOp

A DMARC record is a TXT record at _dmarc.{domain} consisting of semicolon-separated tag=value pairs. Most production records use only 4–5 tags; the rest exist for edge cases.

v=DMARC1; p=reject; pct=100; rua=mailto:[email protected]; sp=reject; aspf=r; adkim=r; fo=1

Required and Near-Required Tags

v=Required

Version

Identifies the record as a DMARC record. The only valid value is DMARC1. Must be the first tag in the record.

Example

v=DMARC1

p=Required

Policy

The action receivers should take on mail that fails DMARC.

Valid values
Recommendation

Start at none, progress to quarantine, then reject. See our policy progression guide.

rua=Strongly Recommended

Aggregate Reporting URI

Where to send aggregate reports. Without this, you have no visibility into what's passing or failing.

Format

One or more comma-separated mailto: URIs.

Example

rua=mailto:[email protected]

rua=mailto:[email protected],mailto:[email protected]

Subdomain and Alignment Control

sp=Optional

Subdomain Policy

Separate enforcement policy for subdomains. Defaults to the value of p= if not specified.

Valid values

Same as p=none, quarantine, or reject.

When to use

If subdomains have different sender ecosystems than the apex. Common pattern: stricter sp=reject when no legitimate mail comes from subdomains.

aspf=Optional

SPF Alignment Mode

How strictly the SPF-authenticated domain must match the From domain.

Valid values
Recommendation

Stick with r unless you have a specific need. Strict alignment breaks more legitimate setups than it stops attacks.

adkim=Optional

DKIM Alignment Mode

How strictly the DKIM signing domain must match the From domain. Same valid values and defaults as aspf=.

Rollout Control

pct=Optional

Percent

Percentage of failing mail to apply the policy to. The remainder gets p=none treatment.

Valid range

0–100 (default 100).

When to use

During the rollout from p=quarantine to p=reject, ramp pct= from 10 to 100 in stages. Once stable, drop the tag (defaults to 100).

Failure Reporting

ruf=Optional

Failure Reporting URI

Where to send per-message failure reports. Most providers don't generate these by default; useful only when paired with fo=.

Format

Same as rua= — one or more mailto: URIs.

fo=Optional

Failure Reporting Options

When to generate failure reports. Each option's behaviour stacks if multiple are specified (colon-separated).

Valid values
Recommendation

fo=1 during early rollout for maximum visibility; drop later.

rf=Optional, rarely changed

Failure Report Format

Format for failure reports. Only valid value in practice is afrf (the default — Authentication Failure Reporting Format).

Reporting Frequency and Length

ri=Optional, rarely changed

Reporting Interval

How often (in seconds) the receiver should send aggregate reports. Default is 86400 (daily). Most receivers ignore values other than 86400 anyway.

A Complete Annotated Example

Production-grade DMARC record

Here's a record covering most production needs:

v=DMARC1; p=reject; sp=reject; pct=100; aspf=r; adkim=r; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; ri=86400

A Minimal Starting Record

Day-1 record for new DMARC deployment

If you're publishing DMARC for the first time today:

v=DMARC1; p=none; rua=mailto:[email protected]

Three tags. Observation mode. Reports flowing back. That's enough to start. Add complexity only as you progress through the rollout.

Validating Your Record

Once you've published the record, verify it:

Common mistakes:

Validate your DMARC record

DMARC Dashboard parses every tag, validates the record, and flags configuration issues — instantly.

Check Your Domain →