Choose a policy, add the address your reports should go to, and copy the record. This builder emits only the eleven tags RFC 9989 defines — and it checks, live, whether the domain receiving your reports has actually authorised you to send them.
Enter your domain to have the record checked against live DNS, or leave it blank and just build the string. Nothing is stored.
Publish this TXT record at
_dmarc.<your domain>v=DMARC1; p=none
16 octets · 2 tags. 0 things to fix, 1 to think about — listed below.
What this record tells receivers to do
| Mail claiming to be from | Example | They apply | From |
|---|---|---|---|
| The domain itself | example.com | none | p |
| Subdomains that exist | mail.example.com | none | p (inherited) |
| Subdomains that do not | old.example.com | none | p (inherited) |
Before you publish
No aggregate report address. The record is valid without one, but you will never see who is sending as your domain, which is the entire reason to publish p=none. Add an address you will actually read.
No score and no letter grade — a record is either going to do what you meant or it is not, and a number in between tells you nothing useful.
Quick Answer: How do I create a DMARC record?
Publish a TXT record at _dmarc.yourdomain.com containing v=DMARC1; p=none; rua=mailto:you@yourdomain.com. That asks receivers to take no action and send you daily summaries of who is using your domain. Two things catch people out: if the report address is on a domain you do not control, that domain must authorise you separately, and pct is no longer a valid tag — RFC 9989 removed it in May 2026.
Robert Harrison
OSINT & Network Utility Expert
Robert works on DNS, network diagnostics and the record-level tooling across TrustMyIP, including the SPF, DKIM and DMARC family.
This builder emits only the eleven tags RFC 9989 defines, because the tag list was read from the RFC itself rather than copied from another generator. Two defects were caught by its own test suite before release: a DNS failure during the DKIM probe was being reported as “no DKIM found”, and a wildcard zone answering every selector with a revoked key was being counted as a working one. Both now report the honest answer, which is that we cannot tell.
Last reviewed 22 September 2026 · Published 22 September 2026
View all articles by Robert HarrisonIt produces one TXT record for the host name _dmarc.yourdomain.com, using only the eleven tags RFC 9989 defines. If you enter your domain it also does three things no form alone can do: it reads the record you already publish, it checks live whether the domain receiving your reports has authorised you to send them, and before it hands you an enforcing policy it confirms the domain has something to authenticate with.
The thing worth knowing before you start is that the standard changed recently. RFC 9989 was published in May 2026 and obsoletes RFC 7489, which had governed DMARC since 2015. Three tags were removed outright — pct, rf and ri — and three were added: np, psd and t. Most generators have not caught up, which means a record built this month can arrive already out of date.
Measured, not asserted: in a survey of 195 published DMARC records on large, well-known domains run on 22 September 2026, 77 still carried pct — and every one of them was set to pct=100, a value that was already the default and changed nothing. None of the 195 used np, psd or t. That sample is biased towards the best-run domains on the internet, so treat it as a floor rather than a census.
Most people arrive at a page like this because Google, Microsoft or Yahoo asked them to, and their published requirements differ enough to be worth reading once. Google asks every sender for SPF or DKIM, and for senders above 5,000 messages a day to Gmail it asks for SPF and DKIM, a DMARC record, and a From address aligned with one of them — in force since 1 February 2024. Microsoft is stricter on the same threshold to its consumer services: both checks must pass, not either. Its enforcement moved from junk-foldering in May 2025 to outright rejection, with a documented 550 5.7.515 bounce. Yahoo asks bulk senders for both plus a DMARC record at p=none, and deliberately publishes no volume number at all — so treat any threshold you see quoted for Yahoo as somebody’s guess.
The practical consequence is that the record this page produces by default — p=none with a report address — already satisfies the DMARC half of all three. Nothing about enforcement is required to clear the gate.
DMARC itself is the layer that tells receivers what to do when a message claiming to be from your domain fails authentication, and where to send the evidence. If you want the mechanics — how alignment is evaluated, what the tree walk replaced, what a receiver does with each result — that is a different job from building the record, and it lives on our DMARC checker rather than here. This page assumes you know roughly what you want and need the string. Deliverability sits downstream of sender reputation more broadly, which the guide to IP reputation scores covers end to end.
example.com, not _dmarc.example.com and not a URL. This is optional, but without it nothing can be checked against real DNS._dmarc.yourdomain.com and loads it into the form, naming any tag the current standard has removed so you can see exactly what changed.none. It is not a weak setting; it is the monitoring setting, and skipping it is how legitimate mail disappears._dmarc, type TXT, the whole string as the value.If SPF is not sorted yet, do it first — the SPF record generator will also tell you whether your record is inside the ten-lookup limit, which is the single most common reason SPF silently stops working after a provider change.
This is the part that costs people months. You publish a correct DMARC record, you point rua at your reporting vendor, and nothing ever arrives. The record validates on every checker you try. Nothing bounces. There is no error anywhere to search for.
The cause is a rule that lives in a different document from the one most people read. RFC 9990 §4, “Verifying External Destinations”, says that when a report address sits on a domain other than the one publishing the policy, the receiving domain has to consent — and it consents by publishing a TXT record of its own:
# your domain is example.com, your reports go to vendor.example
example.com._report._dmarc.vendor.example. IN TXT "v=DMARC1"
Without it, the specification does not say reports are unreliable. Its wording is that the URI “MUST be ignored by the Mail Receiver generating the report”. A wildcard at *._report._dmarc.vendor.example is allowed and authorises every domain at once, though in practice it is rare: in the 239 external report destinations we checked, every single authorisation we found was an exact per-domain record and none was a wildcard.
Two reasons this matters more than its obscurity suggests. First, it is not an edge case — 150 of the 195 domains in that survey sent reports to at least one outside domain, which is most people who have set DMARC up at all. Second, none of the eight page-1 DMARC generators we could read mentions it. They will all hand you a record with an external rua and say nothing.
One honest caveat: RFC 9990 §4 phrases the test as organisational domain against organisational domain, not “is this host inside my domain”. Two names that share a domain you registered — foo.example.com reporting to bar.example.com — need nothing extra, and working that out properly means the RFC 9989 tree walk, which this page deliberately does not run for every address. Where that ambiguity exists the builder says so instead of calling it an error. Who publishes it: not you — the domain receiving the reports. Larger reporting vendors add it automatically when you onboard, which is why their customers rarely hit this. Consultants, in-house mailboxes on a second domain, and smaller services frequently do not. The builder above prints the exact record to send them.
You can list more than one address, and plenty of people do: send a copy to your reporting vendor and a copy to a mailbox you control, so you are not locked out of your own data if the vendor relationship ends. Of the domains we surveyed, 48 used two destinations and six used three or four. Each one is a separate URI in the same rua value, separated by commas — and each one on an outside domain needs its own authorisation record.
The reports themselves are worth the trouble. An aggregate report is an XML summary — RFC 9990 describes the feedback as “daily (or more frequent)” — of every IP that sent mail claiming to be your domain, what passed, and what did not — which is how you find the ticketing system nobody remembered was sending invoices. If the wider picture of why your mail lands where it lands is the actual question, the guide to improving a bad IP reputation score sits alongside this one.
One record carries up to three policies, and they apply to three different classes of name. The domain itself always uses p. A subdomain that exists uses sp if you set it, otherwise it falls back to p. A subdomain that has never existed uses np if you set it, then sp, then p. The results panel above spells this out for whatever you have built, because the inheritance is the part people get wrong.
p=none asks receivers to change nothing and send you reports anyway. RFC 9989 puts a number on how long that should last: a domain intending to reach p=reject should get there “by publishing ‘p=none’ for at least a month, followed by publishing ‘p=quarantine’ for an equally long period of time”. The calendar is less important than the condition: move on when you can name every sender in the reports. Most organisations discover two or three they had forgotten, and those are exactly the ones that break on the day you enforce.
Spoofers do not need a subdomain to exist. billing.yourdomain.com resolving to nothing does not stop a message claiming to come from it, and under the old standard that name inherited whatever sp or p said — usually none, during the months you are monitoring. Setting np=reject closes that while the rest of your rollout proceeds at its own pace, and it costs nothing if no such name sends mail. Adoption in our survey was zero out of 195.
RFC 9989 §7.4 is unusually direct: a domain publishing p=reject “MUST NOT rely solely on SPF to secure a DMARC pass and MUST apply valid DKIM signatures”. The reason is forwarding. SPF authenticates the server that connected, so a mailing list or a forwarded message fails it by design; a DKIM signature travels with the message and survives. Publishing reject on a domain where only SPF works means every forwarded message is refused. The builder checks for a key before it hands you an enforcing record, but a proper look at what you have signed — and at what key length — belongs on the DKIM record checker.
A domain that never sends email is the easiest DMARC decision you will make, and the one most often left undone. Publish v=DMARC1; p=reject; np=reject with a report address and you are finished: there is no legitimate mail to break, so enforcement costs you nothing and every forged message from that name fails outright.
More names qualify than people expect. The domain you registered defensively so a competitor could not have it. The old one you now redirect to the current site. The country variants bought for a launch that never happened. A subdomain that exists for a website rather than for mail. Each of those is a usable From address to anyone who notices it is unprotected, and each is spoofable while the domain you actually care about sits locked down.
Pair it with an SPF record of v=spf1 -all on the same name, which says the same thing about the envelope. DMARC handles the visible From address; SPF handles the connection. Neither covers the other, and a parked domain deserves both.
The subdomain escape: if one system cannot be brought up to standard, move it to its own subdomain and give that name a permissive record of its own while the parent enforces. The domain your invoices come from gets protected now instead of after the migration finishes. Note that RFC 9989 §4.7 says sp “will be ignored for DMARC Policy Records published on subdomains of Organizational Domains and PSDs”; np is found by the same discovery, so neither tag does anything on that subdomain’s own record. If you are weighing domain-level against IP-level reputation while you plan this, the comparison of IP and domain reputation is the relevant background.
RFC 9989 defines eleven tags in total. A correct record uses two or three of them. In the 195 published records we surveyed, the median carried five and the shortest working ones carried two — there is no prize for filling in every field a form offers you.
| Tag | What it does | Should you set it? |
|---|---|---|
v | Version. Always DMARC1, always first. | Automatic |
p | What receivers do with mail from the domain itself that fails. | Required |
rua | Where aggregate reports are sent — RFC 9990 calls them “daily (or more frequent)”. | Yes — without it there is nothing to learn |
sp | Policy for subdomains that exist. Ignored on a subdomain’s own record. | Only when subdomains need different treatment |
np | Policy for subdomains that do not exist. Added by RFC 9989. | Worth setting to reject early |
adkim | DKIM alignment: relaxed lets a subdomain sign, strict does not. | Leave relaxed |
aspf | SPF alignment, same idea. | Leave relaxed |
ruf | Where individual failure reports are sent. | Usually not — see below |
fo | When a failure report is generated. Meaningless without ruf. | Only with ruf |
t | Testing mode. t=y means collect data but do not apply the policy. | During a rollout, then remove it |
psd | Marks the record as belonging to a public suffix — a registry, or a name like .gov.uk under which others register. | No, unless you operate one. Not offered in the form above for that reason |
pct, rf and ri were removed by RFC 9989, and the IANA DMARC tag registry now lists all three as historic against RFC 7489, while the other eleven are active against RFC 9989. pct is the one you will still see everywhere. It applied your policy to a percentage of mail, and the only value in wide use was the extreme one: of the 77 records carrying it in our survey, every single one said pct=100, which was already the default. The t tag now covers the testing case, and nothing at all covers a partial value like pct=50. Leaving them in an existing record is not urgent, because receivers ignore tags they do not recognise; this builder simply will not write new ones.
RFC 9991, the failure-reporting specification, is blunt about how much of this actually happens: “many large-scale providers limit or entirely disable the generation of failure reports, preferring to rely on aggregate reports”. It is equally blunt about the contents — they “may include PII and non-public information (NPI) … since these reports may contain message content as well as trace header fields”. That is other people’s correspondence arriving in a mailbox you now have to think about. If what you actually want is to read the authentication results on one specific message you already have, paste it into the email header analyzer instead — it is faster and involves nobody else’s data.
Strict alignment is not safer: it is more brittle. adkim=s requires the signing domain to match your From domain exactly, so mail signed by a provider on a subdomain stops aligning — which is how most outsourced mail is configured. Four of the 195 records in our survey used it. If a generator presents relaxed and strict as equal choices with no warning, that is the warning.
Host name _dmarc, type TXT, value the whole string including v=DMARC1. The underscore is part of the name and is correct; panels that reject it are being unhelpful rather than accurate.
Almost every failed first attempt is the host field. Some control panels want just _dmarc and append the domain themselves. Others want the fully qualified _dmarc.example.com. Enter the wrong one and you create _dmarc.example.com.example.com, which resolves to nothing at all — and the panel will show it back to you looking perfectly correct.
_dmarc with type TXT._dmarc.yourdomain.com shows you what the world actually sees.If the record still reads as missing minutes after you published it, the usual culprit is negative caching rather than propagation. RFC 2308 derives how long a resolver keeps a “this name does not exist” answer from your zone’s SOA record — so if anything looked the name up before you published, that absence is cached for a while. It is also why lowering the TTL a day before a change is worth the small amount of planning.
One record only. Two v=DMARC1 records at _dmarc is a permanent error: receivers apply no policy at all rather than picking one. It happens when somebody adds a second vendor by creating a new TXT record instead of editing the existing one. Combine the tags into a single record and delete the other.
v=DMARC1; p=none; rua=mailto:you@yourdomain.com and nothing else. Resist the urge to add tags you have not needed yet — in a September 2026 survey of 195 published records on large domains, the median record carried five tags and the shortest working ones carried two. Start at p=none so nothing is affected, read the aggregate reports for a few weeks until you recognise every sender in them, and only then tighten.
Because pct no longer exists. RFC 9989 removed it in May 2026 — Appendix A.6 is titled “Removal of the ‘pct’ Tag” — and IANA now lists it as historic, alongside rf and ri. Three of the four page-1 generators we could read still offer it. If your current record has pct=100 you are in large company: 77 of the 195 records we surveyed carried it, and every single one was set to 100, which was already the default and changed nothing.
t tag and when should I use it?RFC 9989 §4.7 defines it as a signal “as to whether or not the Domain Owner wishes the Domain Owner Assessment Policy declared in the ‘p’, ‘sp’, and/or ‘np’ tags to actually be applied”. In plain terms: t=y says you are still testing, so collect the data but do not act on it; t=n is the default and means the policy is live. It earns its place the moment you first publish p=quarantine or p=reject and want a week of reports before enforcement really bites. There is no way to apply a policy to only part of your mail any more — the tag that did that is gone, and nothing replaced it.
If your report address is on a domain you do not control — a vendor, a consultant, your own mailbox on another name — that domain has to consent by publishing yourdomain._report._dmarc.theirdomain as a TXT record containing v=DMARC1. Without it, RFC 9990 §4 requires receivers to ignore the address. No bounce, no error, no reports. The builder above checks this for you and prints the record that is missing.
Yes, and most people do — 150 of the 195 domains we surveyed send reports to at least one outside domain. It just needs the authorisation record described above, published by the receiving side, not by you. Larger vendors set it up automatically when you onboard; smaller ones and individual consultants often do not. The useful habit is to verify it the day you add the address rather than wondering a month later why the dashboard is empty.
No. One record on your organisational domain covers the whole tree, because sp sets the policy for subdomains that exist and np for names that do not. Publish a record on a subdomain only when you want that one name treated differently — a marketing subdomain you are still testing while the parent is at reject, for example. One asymmetry catches people: the tags only work downwards. A record you publish on a subdomain governs that name alone, and any sp or np you put in it is discarded — RFC 9989 §4.7 says so explicitly for sp, and np is found by the same discovery process. Worth knowing before you copy your apex record onto a subdomain and assume it carries its subdomain rules with it.
np do and do I need it?It sets the policy for mail claiming to come from a subdomain that has never existed — the spoofing route that p and sp both leave open, because attackers invent names like billing.yourdomain.com that resolve to nothing. RFC 9989 added it in May 2026. Adoption is not slow, it is zero: none of the 195 records we surveyed used it, including every mailbox provider and every DMARC vendor we checked. Setting np=reject costs nothing if no such name sends mail.
Relaxed, unless you have a specific reason. Strict alignment (adkim=s, aspf=s) requires the signing domain to match your From domain exactly, so a subdomain stops counting — and mail sent through an ESP is usually signed on a subdomain, which is why strict breaks working setups. Four of the 195 records we surveyed used adkim=s and four used aspf=s. Several generators present the two as equal choices with no warning attached.
p=none?A month is the floor RFC 9989 sets before moving to quarantine, and the same again before reject — but the calendar is the weaker half of the answer. The real test is whether you can name every sender appearing in your reports: the payroll system, the ticketing tool, the one marketing platform nobody remembers buying. Moving early does not break mail on the day you move. It breaks it weeks later, on the day that forgotten sender next runs a campaign, which is precisely why the outage gets blamed on something else.
No. Two v=DMARC1 records at _dmarc is a permanent error, not a merge and not a fallback — receivers treat the whole thing as unusable and apply no policy at all. It usually happens when somebody adds a vendor by creating a second TXT record instead of editing the one that exists. Combine every tag you need into a single record and delete the other. If you are unsure which of yours is live, read the published one with our DMARC checker first.
The host name is _dmarc, the type is TXT, and the value is the whole string. The confusion is almost always the host field: some panels want just _dmarc, others want the fully qualified _dmarc.yourdomain.com, and entering the wrong one creates _dmarc.yourdomain.com.yourdomain.com, which resolves to nothing. Publish it, then look up the name and confirm what actually came back — do not trust the panel’s preview.
For p=none, no — that is the point of monitoring mode, and publishing it early is how you find out what your senders are doing. For anything enforcing, yes. RFC 9989 §7.4 states that a domain publishing p=reject “MUST NOT rely solely on SPF … and MUST apply valid DKIM signatures”. SPF breaks the moment a message is forwarded; a DKIM signature travels with it. The builder checks both before it hands you an enforcing record.
fo, and should I turn on failure reports?fo controls when a receiver generates an individual failure report: 0 only when everything fails, 1 when anything fails, d on a DKIM failure, s on an SPF failure. Whether to turn them on at all is the harder question. RFC 9991 warns that these reports “may include PII and non-public information (NPI) … since these reports may contain message content as well as trace header fields” — somebody else’s mail, arriving in a mailbox you are now responsible for. Coverage is also patchy enough that they rarely repay the trouble. One practical note from the field: of the 195 records we surveyed, 107 set fo at all and 96 of those chose 1.
It depends on the TTL of the record and, if you looked the name up before publishing, on negative caching — RFC 2308 derives how long a cached “this does not exist” answer survives from your zone’s SOA, which is why a brand new record can still read as missing. The routine that avoids the guesswork: lower the TTL a day ahead, publish, verify the name directly, then put the TTL back.
DMARC only works when SPF and DKIM already do. These check the other pieces, and the reputation the whole thing protects.
A record that looks right in your DNS panel is not the same as a record that resolves correctly in public DNS. Check the published version, and make sure the other half of the setup is signing.
Last updated 22 September 2026 · Tag set from RFC 9989; report authorisation from RFC 9990 §4; every check resolved live against public DNS