[ DMARC & policy ]

Multiple DMARC records: repair the record set at the affected name

Count policy candidates after inspecting TXT record boundaries, correct the approved value at the exact owner name and trace any discovery fallback.

By the EmailAuth research team · 6 min read

[ Key points ]

  • Separate TXT strings, distinct records and different owner names.
  • Trace current candidate filtering and subsequent discovery.
  • Approve one coherent policy and verify reporting and mail separately.
On this page

Adding a second DMARC policy is not a way to update the first one. The two values do not become a combined instruction, and DNS does not supply an ordered “newest policy wins” rule for them.

The repair begins with the complete TXT record set at the affected name. Identify how many current-version policy candidates exist, distinguish their boundaries from display formatting and reconcile the owner's intended policy before editing.

Inspect the exact DNS owner

Start from the domain in the message's From address. Query the applicable _dmarc name and record the authoritative and relevant recursive answers with timestamps.

A root-domain policy and an explicit subdomain policy are published at different names. They are not duplicates merely because both exist. Their relationship is governed by discovery and scope. The subdomain-policy guide explains how to assess that relationship.

Likewise, a policy TXT at the domain root is not a substitute for the relevant _dmarc name. Repair the intended owner rather than adding records in several places and hoping the receiver chooses one.

Distinguish a record from its character strings

A single TXT resource record can contain more than one character string. DMARC concatenates those strings in order before parsing under RFC 9989 §4.5. Displayed quotes around the strings are normally the lookup tool's representation.

This synthetic zone-style fixture is one TXT record:

_dmarc.example.com. 300 IN TXT "v=DMARC1; p=none; " "rua=mailto:reports@example.com"

Its concatenated value contains a separator and space between the p and rua tags because those characters were included inside the strings. A resolver does not invent a missing separator when it joins them.

By contrast, two separate TXT resource records are two records. Do not concatenate them in a spreadsheet or incident note and then analyse that invented value.

Filter before counting policy candidates

The RFC 9989 §4.10 DNS tree walk discards records that do not start with the v tag identifying the current version. If multiple DMARC policy records are returned at one target, it discards all of them at that target.

An unrelated TXT value at the same name is therefore not automatically a second DMARC policy. Count the relevant candidates after preserving each original record and applying the defined filtering.

The following are synthetic fixtures, not live lookup results:

  • Record set at one target: One current-version DMARC candidate; Interpretation to investigate: Parse that candidate and its policy semantics
  • Record set at one target: One DMARC candidate plus unrelated descriptive TXT; Interpretation to investigate: Unrelated TXT is not a second DMARC policy candidate
  • Record set at one target: Two separate records starting with v=DMARC1; Interpretation to investigate: Competing policy candidates; no merging or last-record selection
  • Record set at one target: One record made of two character strings; Interpretation to investigate: Concatenate its strings in order, then parse

Under RFC 9989 §4.7, the version tag must appear first with the exact value DMARC1. A string that merely mentions that text later is not a replacement for the defined record identification.

Trace the consequence instead of promising one error label

Multiple policy candidates at an initial lookup can leave no valid policy at that name. Under RFC 9989 §4.10.1, current discovery may then continue through the applicable DNS tree walk. A usable policy found elsewhere can affect the message.

For example, in a fictional subdomain fixture, two candidates at _dmarc.alerts.example.com are discarded. If discovery subsequently finds an applicable valid policy at an organisational domain, that policy can apply. If the complete discovery finds none, DMARC does not apply to the message.

Do not promise that every duplicate produces the same Authentication-Results label or SMTP response across implementations. Preserve the receiver's actual result and its applicable discovery path.

Reconcile one approved policy before changing DNS

Determine which values are intentional. Two records may have been created by different teams, by an old reporting integration or by a migration that added instead of replacing data.

Build one coherent approved value. Preserve intended report destinations and review alignment, subdomain scope and testing settings. If several aggregate recipients are authorised, a comma-separated rua destination list defined in RFC 9989 §4.7 in one policy can express that request; it does not require multiple policy TXT records.

Verify any required external reporting permission separately under RFC 9990 §4. Combining destination addresses does not grant permission at a destination you do not control.

Make and verify the correction

Save the before-state, complete approved after-state, owner name, TTL and change authorisation. Replace the competing candidates with the intended single policy at that name.

Then check authoritative servers for the new record set and examine relevant recursive views. Cached earlier values may remain for a time, so one current authoritative answer is not evidence that every receiver has discarded the old set.

Run a representative message test and inspect its trusted authentication and policy results. DNS correction establishes a valid configuration dependency; it does not make an unrelated DKIM signature align or correct an application's envelope identity.

Use the record workflow to connect publication and message verification.

Prevent the same conflict on the next integration

Give the domain a policy owner and require integrations to propose a diff to the existing record rather than add another policy blindly. Retain the business purpose and lifecycle of each reporting destination.

A useful migration handoff names who removes obsolete configuration and who verifies the resulting record set. The durable fix is one intentional policy at each relevant name, with discovery, reporting and actual mail behaviour understood.

Keep the decision and evidence separate

For the split-string fixture, the first string ends with a semicolon and space, so joining it with rua yields one coherent value. Two separate records instead remain two candidates, regardless of display order. Keep the full-discovery result distinct from the single-name defect. RFC 8767 §4 also means TTL expiry is not a guaranteed global removal deadline for cached data. The fixture was not published or queried.

[ Takeaway ]

Separate TXT strings, distinct records and different owner names. Trace current candidate filtering and subsequent discovery. Approve one coherent policy and verify reporting and mail separately.

[ By role ]

What this means for you

Choose your role for practical next steps.

IT / Mail Admin

Preserve record boundaries and trace discovery.

A TXT display can conceal the difference between strings and resource records.

Next steps

  1. Capture complete authoritative and recursive answers.
  2. Filter current-version candidates before counting.
  3. Test the corrected policy and actual message alignment.

CISO / SecOps

Review the trust and reporting scope during the repair.

Combining values can change more than the number of records.

Next steps

  1. Approve the resulting alignment and subdomain policy.
  2. Review every reporting recipient.
  3. Retire obsolete integration configuration explicitly.

Founder / Non-technical

Make one owner accountable for the policy.

A new integration should not create a competing instruction for the same domain.

Next steps

  1. Assign policy ownership before onboarding tools.
  2. Require a readable before-and-after change.
  3. Confirm the correction on an important mail route.

[ FAQs ]

Frequently asked questions

Are two TXT character strings always two DMARC records?

No. One TXT resource record can contain several strings. DMARC joins those strings in order before parsing; separate resource records remain separate.

RFC 9989 §4.5

Does DNS choose the last or newest DMARC record?

No such policy-selection rule applies. Do not depend on the display order of resource records or merge competing policies.

RFC 9989 §4.10

Does every extra TXT record count as a duplicate DMARC policy?

No. Preserve record boundaries and apply the current-version record-identification rules. Unrelated TXT data is not automatically a second policy candidate.

RFC 9989 §4.10

Can a parent and subdomain each have their own DMARC record?

Yes. They are different owner names, and discovery determines the policy applicable to a message. Their coexistence is not duplication at one name.

RFC 9989 §4.10.1

Will duplicate policy candidates always cause the same permanent error?

Do not assume one universal label or SMTP outcome. RFC 9989 discards multiple policy candidates at a target, and the remaining discovery path can affect whether another policy is used.

RFC 9989 §4.10 RFC 9989 §4.10.1

How can we request reports at two destinations?

Use an approved comma-separated rua URI list within one policy. Verify required external-destination authorisation and actual collection for each relevant destination.

RFC 9989 §4.7 RFC 9990 §4

Does fixing duplicate records prove our mail passes DMARC?

No. Verify a representative message's actual identities, authentication and alignment after the record-set repair.

RFC 9989 §5.3.5

How do we avoid this during the next vendor integration?

Require the domain's policy owner to review a proposed change to the existing complete record, including retirement of obsolete values and destinations.

[ Sources ]

Sources

  1. RFC 9989

    Sections §4.5 · §4.7 · §4.10 · §4.10.1 · §5.3.5 · §3.2.6

  2. RFC 9990

    Sections §4

  3. RFC 8767

    Sections §4

[ Glossary ]

Glossary

DMARC Policy Record
A DNS TXT record enabling validation and expressing handling preferences and optional reporting requests for applicable domains.

RFC 9989 §3.2.6

TXT character strings
Multiple strings within one TXT record are concatenated in order for DMARC; separate records are not combined.

RFC 9989 §4.5

Enterprise provenance

Why top financial institutions and governments retired their email security dashboards.

Traditional email authentication platforms sell you a dashboard and ask your engineers to do the labour. In high-stakes environments, manual oversight means delayed enforcement, configuration drift and unmonitored shadow domains.

EmailAuth is the agentic email provenance platform. Our agents enforce p=reject, keep third-party senders aligned and move your domains to full RFC 9989 compliance, the new DMARC standard,, with human-in-the-loop auditability.

Governments Large enterprises Tier-1 financial institutions

SaaS · Dedicated tenancy · Air-gapped on-prem · BYOK encryption

Knowledge Base