SmartReach.io LogoSmartReach.io

Free tool · no signup

Free DMARC record generator

Build the DMARC record for your domain, and find out before you publish it whether the reports it asks for will actually reach you. Most DMARC records that produce no reports are correct. They were just never authorised.

Ungated · no email required · unlimited use

In short

  • This is a free, ungated DMARC record generator. It builds the TXT record published at _dmarc on a domain, which tells receiving mail servers what to do with messages that fail SPF and DKIM alignment, and where to send the reports.
  • A DMARC record starts with v=DMARC1 followed by a p tag. RFC 7489 §6.3 requires those two in that order; every other tag may follow in any order. The record is published on the _dmarc subdomain, not on the root of the domain as SPF is.
  • The policy is a position on a ladder, not a setting. p=none changes nothing and starts the reports; p=quarantine sends failing mail to spam; p=reject refuses it outright and is the only policy that actually stops spoofing. The correct first record for any domain is p=none with a report address.
  • RFC 7489 §7.1 requires that when reports are sent to a domain outside your own, that domain must publish an authorisation record at yourdomain._report._dmarc.theirdomain. Without it, receivers must not send your reports, which is the most common reason a correct DMARC record produces nothing. This generator checks it against live DNS while you type the address.
  • DMARC is a verdict on SPF and DKIM: mail that neither can vouch for in an aligned way fails. Enforcement on a domain with broken authentication therefore refuses that domain's own mail, so this generator reads the SPF record first and states what it can and cannot see before handing over an enforcing policy.
  • DMARC defines twelve tags, of which only v and p are required; every other tag has a default that applies when it is omitted, so a short record is usually the correct one. The tag most records are missing is np, added by RFC 9091, which sets the policy for subdomains that do not resolve. Because nothing legitimate can send from a subdomain that does not exist, np=reject carries no rollout risk and is safe to publish on the same day as p=none.
  1. Enter your domain recommended

    We read the DMARC record you already publish so you edit it rather than replace it blind, and we read your SPF record, because DMARC is a verdict on it.

    Without a domain the record still builds, but nothing can be verified: whether your reports will arrive is a question about your domain, not about the address.

  2. Say where the reports go

    The aggregate report address. This comes before the policy because it is what makes every later step safe: reports are how you find the senders you forgot about, and you cannot raise a policy you cannot measure.

  3. Pick your rung on the ladder

    DMARC is a position on a ladder, not a setting. Each rung has something that has to be true before you climb to it.

    Advanced tags
    Subdomain policy sp

    Applies to subdomains instead of the main policy. Worth setting to reject even while your main domain is at none, because subdomains that never send are the easiest thing in your estate to spoof.

    Non-existent subdomains np

    Applies only to subdomains that do not resolve at all: the ones an attacker invents, like invoices.yourdomain.com. Nothing legitimate can ever send from a subdomain that does not exist, so np=reject is the one enforcement setting with no rollout risk attached, and it is safe on day one even while your main domain is still at none.

    np=reject is the one enforcement setting that cannot break anything: a subdomain that does not resolve has never sent legitimate mail. Safe to publish today, even at p=none.

    DKIM alignment adkim
    SPF alignment aspf

    Relaxed accepts a subdomain match, strict demands an exact one. Relaxed is the default and the right answer for almost everyone; strict breaks mail sent from subdomains you forgot about.

    Forensic reports ruf

    Per-message failure reports, which may contain content and recipient addresses. Most large receivers never send them. Treat turning this on as a data-protection decision, not a technical one.

Your DMARC record
Format
v=DMARC1; p=none;

The value on its own. This is what the host or value field of a DNS panel expects.

No report address, so this record produces nothing you can read. You will never find out who sends as your domain, which means you can never safely climb past monitoring. Add one in step 2.

How to publish this
Type
TXT
Host / name
_dmarc
Value
The record below
TTL
3600

The one that catches people: DMARC does not go on the root of the domain the way SPF does. It goes on _dmarc, and a DMARC record published at the root does nothing at all, with no error shown anywhere.

Check it once published

Reading DMARC reports is where most rollouts stall

The reports arrive as XML from every receiver on the internet, and the work is finding the legitimate senders hiding in them. SmartReach keeps your sending domains authenticated and warmed so there is far less to find.

See the deliverability suite
4.6 on G25,000+ sales teams and agenciesGDPR · CAN-SPAM
One valid recordReports verified liveChecks §7.1 authorisationReads your SPF firstMerges what you haveNo reject on a broken domainEvery tag, including npBIND and tinydns outputCopy and publishFree and ungated

The order that matters

Reports first, policy second

Every other DMARC generator opens with the policy dropdown. Policy is the last decision, not the first: a record at p=reject published before anyone has read a report is how an organisation blocks its own invoices. The reports are what make each step up the ladder safe, so they come first here.

Start from what you publish

Enter your domain and we read the DMARC record already at _dmarc, plus the state of your SPF, so the record you build is an edit rather than a rival.

Say where the reports go

The aggregate report address comes first because it is what makes every later step safe. We check live that the destination is authorised to receive your reports and can accept mail at all.

Pick your rung on the ladder

Monitor, quarantine or reject, with what has to be true before each. The tool will tell you when the rung you picked is ahead of the domain you picked it for.

Publish, then watch

Copy the record into one TXT record at _dmarc on your domain, wait for the TTL, then check it with the DMARC checker and start reading what arrives.

The three rungs

What has to be true before each policy

Start here

p=none · Monitor

Receivers change nothing about how they treat your mail, and send you reports on what they saw. Nothing can break, which is the point: this is the rung where you find out who sends as your domain.

First: Nothing. Publish it today, then read reports for two to four weeks before moving.

Once the reports are clean

p=quarantine · Quarantine

Mail that fails alignment goes to spam rather than the inbox. Legitimate senders you have missed become visible fast, and recoverably, because the message is findable rather than gone.

First: Every legitimate sender you found in the reports now passes SPF or DKIM with alignment. Move a percentage at a time if you are unsure.

The destination

p=reject · Reject

Mail that fails alignment is refused at the door. This is the only policy that actually stops someone spoofing your domain, and the only one Gmail and Yahoo treat as full compliance for bulk senders.

First: Weeks of clean reports at quarantine, and working SPF and DKIM. Publish it while either is broken and you block your own mail.

The rung most people skip is the one that costs nothing: RFC 7489 §6.6.3 gives DMARC inheritance that SPF does not have, so sp=reject protects every subdomain you have, including the ones that never send mail and are the easiest thing in your estate to spoof, while your main domain is still safely monitoring.

Deliberate omissions

What this generator will not emit

DMARC's failure mode is not a silent permerror. It is your own invoices being refused. These six are left out for a reason from the specification rather than a house preference.

p=reject

It will not hand you reject on a broken domain

DMARC is a verdict on SPF and DKIM, so enforcement on a domain whose SPF is missing or over the lookup limit rejects your own mail. We read your SPF record in the same pass and say so before you copy anything.

no rua

It will not build a record with nowhere to report

A policy you cannot measure is a policy you cannot safely raise. Without a rua address you get no reports, so you never learn who sends as your domain and you can never move past monitoring with any confidence.

ruf

It will not add forensic reporting by default

Failure reports can carry message content and recipient addresses, which makes them a data-protection question rather than a technical one. Most large receivers never send them anyway. It is available under the advanced options with that warning attached, not switched on quietly.

pct

It will not emit pct with p=none

The percentage tag says what share of failing mail gets the policy applied. At p=none nothing is being applied to any of it, so the tag reads as caution while doing nothing at all.

unverified rua

It will not pretend an unauthorised address will work

When your reports go to a domain you do not own, RFC 7489 §7.1 requires that domain to publish an authorisation record before any receiver will send anything. We check for it live, and a missing one is shown as the blocker it is rather than left to be discovered by an empty dashboard.

rf

It will not emit tags that only restate a default

rf=afrf is the only report format anyone implements, and adkim=r and aspf=r are already what receivers assume. Emitting them adds length and gives a reader something to wonder about without changing what any receiver does. The shortest record that says what you mean is the correct one.

The one worth reading twice is the report authorisation. RFC 7489 §7.1 puts the requirement on the DESTINATION, not on you: your record can be perfect and your vendor can simply never have published the record that lets them receive anything. Receivers are not permitted to send in that case, so the failure is total, silent, and invisible from your own DNS.

Take it with you

Put this generator on your own site

Free to embed, on any site, with no permission needed and nothing to sign. It carries a visible credit back here, which is the whole arrangement. The report addresses are still verified against live DNS inside the frame, so an embedded copy checks exactly what this one does.

Paste this where you want it

<iframe
  src="https://smartreach.io/tools/embed/dmarc-generator/"
  title="Free DMARC record generator by SmartReach.io"
  width="100%" height="1100" loading="lazy"
  style="border:1px solid #e3e9f2;border-radius:12px"></iframe>

The frame scrolls internally, so the height is a starting point rather than a requirement. Raise it if you would rather the whole tool be visible at once.

Deliberate by default

What this generator puts in, and what it leaves out

DMARC defines twelve tags. Two are required and the rest all have defaults, so the shortest record that says what you mean is usually the correct one, which is why the record you just built is shorter than the specification. This is every tag, and the rule that decides whether it appears. For what each one means, the DMARC checker carries the full reference.

TagWhen this generator emits it
v=requiredAlways, first. RFC 7489 §6.3 requires it there.
p=requiredAlways, second, for the same reason.
rua=Whenever you give an address, and each one is checked against live DNS first, because a report address that is not authorised produces silence rather than an error.
ruf=Only when you switch it on. Failure reports can carry message content, which makes enabling them a data-protection decision rather than a technical one.
sp=Only when you set it. Worth setting on almost every domain.
np=Only when you set it. Worth setting to reject on day one, because it is the one enforcement setting with no rollout risk attached.
adkim=Only when you choose strict. Relaxed is already what receivers assume.
aspf=Only when you choose strict, for the same reason.
pct=Only below 100, and never at p=none, where a percentage of a policy that applies to nothing reads as caution while doing nothing at all.
fo=Only alongside ruf, and defaulted to 1 rather than the specification default of 0, which reports only when SPF and DKIM both fail.
ri=Only when you change it from daily, which receivers may ignore anyway.
rf=Never. afrf is the only value in real use, so emitting it adds length and changes nothing.

The one most records are missing is np, added by RFC 9091 after the original specification and still absent from most generators. It sets the policy for subdomains that do not resolve at all: the ones an attacker invents. Nothing legitimate can ever send from a subdomain that does not exist, so np=reject is the only enforcement setting with no rollout risk attached, and it is safe on the same day you publish p=none.

Once it is published

DMARC only works on top of the other two

A DMARC policy does not authenticate anything by itself. It decides what happens when SPF and DKIM have already spoken. Check the published record, then check the two records it passes judgement on.

What happens when a check fails

DMARC Checker

DMARC tells receivers whether to quarantine or reject mail that fails SPF and DKIM, and where to send the reports. Check your policy, alignment and reporting address.

What it looks like

v=DMARC1; p=reject; pct=100

Which servers may send as you

SPF Checker

SPF lists the servers allowed to send mail for your domain. Check that yours is published, resolves, and stays under the ten-lookup limit that silently breaks it.

What it looks like

v=spf1 include:_spf.google.com ~all

Proof the message is really yours

DKIM Checker

DKIM signs every message with a key only you hold. Check that the public key is published, parses, is not revoked, and is long enough to be trusted.

What it looks like

v=DKIM1; k=rsa; p=MIIBIjANBgkq…

Or start from a domain that already enforces

The ladder, already climbed

Every rung above monitoring depends on SPF and DKIM being right on every system that sends as you. SmartReach hands you sending domains and mailboxes with all three records in place, so there is nothing to fix before you can enforce.

  • Sending domains and mailboxes bought and authenticated in minutes, no IT ticket
  • SPF, DKIM and DMARC configured for you, so there is no record to hand-edit
  • Warmup, inbox rotation and ESP matching across unlimited sending accounts
  • Every address verified free before a campaign sends, so bounces never touch your domain
See how sending setup works →
Photo of Matt McQuinThis software is focused on the end receiver as much as the user.Matt McQuin · Co-founder, Coldlytics

Every rule on this page is checked against RFC 7489, the specification that defines DMARC. Last reviewed . The report authorisation check runs against live DNS every time you use it, not against anything stored here.

FREQUENTLY ASKED QUESTIONS

DMARC record questions, answered

Publish one TXT record on the _dmarc subdomain of your domain, starting with v=DMARC1, followed by a p tag saying what receivers should do with mail that fails, and a rua tag saying where to send the aggregate reports. A first record usually looks like v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. The v tag must come first and p must come second; the rest may be in any order. The generator on this page assembles it and checks that the report address will actually receive anything.

Stop fixing deliverability one DNS record at a time.

SmartReach buys and authenticates your sending domains and mailboxes with SPF, DKIM and DMARC already in place, then warms them, rotates them, and verifies every address before you send.

14-day free trial No credit card All features included Unlimited sending inboxes