Can your domain be spoofed? How to check your DMARC, SPF and DKIM
Look up your domain's DMARC record at _dmarc.yourdomain. If there's no record, it's broken, or the policy is p=none, receivers aren't asked to block forged mail, so your domain can be spoofed. You're protected against exact-domain spoofing only with p=quarantine or p=reject, no t=y flag, and SPF or DKIM passing for real senders.
On this page 9 sections
Anyone can type your domain into the From line of an email. Whether that forgery lands in an inbox depends mostly on a few public DNS records you control. This guide shows how to read those records yourself, which combinations leave your domain open, and what to fix first.
Can someone spoof my email domain?
Your domain can be spoofed if it doesn't publish a DMARC policy of p=quarantine or p=reject. DMARC (Domain-based Message Authentication, Reporting and Conformance, defined in RFC 9989) is the record that tells receivers what to do with mail that claims your domain in the From address but fails authentication. Without an enforcing policy, each receiver decides on its own, and many forged messages get through.
Three records work together:
- SPF (Sender Policy Framework, RFC 7208) lists the servers allowed to send mail for the envelope sender, the hidden bounce address.
- DKIM (DomainKeys Identified Mail) adds a cryptographic signature that names a signing domain.
- DMARC requires that SPF or DKIM passes for a domain that aligns with the visible From address, and publishes your policy for failures.
Microsoft summarizes the rule: a message "passes DMARC if one or both of the described SPF or DKIM checks pass", and "fails DMARC if both of the described SPF and DKIM checks fail" (Microsoft Learn). For more background, see what email spoofing is.
How do I check my domain's spoofing protection?
You check it by looking up three public DNS records and reading a handful of tags.
- Run the DMARC Checker on your domain, or look it up yourself:
In PowerShell, Microsoft's example isnslookup -type=TXT _dmarc.example.comResolve-DnsName -Name "_dmarc.contoso.com" -Type TXT. - Note the
p=value, plussp=,np=andt=if present. - Run the SPF Checker. Confirm there's exactly one SPF record, it doesn't end in
+all, and it stays within the 10-lookup limit. - Check DKIM for each service that sends as your domain with the DKIM Checker. If you don't know the selector, see how to find a DKIM selector.
- Send yourself a test message from your normal mail system to an outside mailbox, open the headers and confirm
dmarc=pass. Our guide to checking SPF, DKIM and DMARC results shows where to look. - Repeat for every domain you own, including ones that never send email.
The Email Health Check does steps 1 to 4 in one scan.
What do the results mean?
Your domain is protected only when DMARC is at p=quarantine or p=reject with no test flag and your real senders pass. This table covers the common results:
| What you find | Can your exact domain be spoofed? | Why |
|---|---|---|
No _dmarc record |
Yes | RFC 9989 says receivers "MUST NOT apply the DMARC mechanism" when no record is found |
Record with no valid p= tag |
Yes | Treated as p=none if a valid rua exists; otherwise no DMARC processing at all |
| Two DMARC records | Yes | RFC 9989 says that if multiple records are returned for one name, "they are all discarded"; Microsoft tells you to "ensure only one _dmarc TXT record exists" |
p=none |
Yes | Policies of p=none "MUST NOT modify existing mail handling processes" (RFC 9989, section 5.4) |
p=quarantine; t=y |
Yes | t=y asks receivers to apply one level lower, so quarantine becomes none |
p=reject; t=y |
Partly | Failing mail is treated as quarantine instead of rejected |
p=quarantine |
Mostly protected | Forged mail should go to spam or quarantine at receivers that honor DMARC |
p=reject |
Protected against exact-domain spoofing | Forged mail should be refused at receivers that honor DMARC |
p=reject; sp=none |
Main domain no; subdomains yes | sp sets the policy for existing subdomains |
The t=y rule comes straight from RFC 9989: "if the policy is 'reject' and the value of the 't' tag is 'y', a policy of 'quarantine' will be applied to failing messages". RFC 9989 also removed the old pct tag, so pct= values are no longer part of the standard, though some receivers may still read them.
CISA's federal email directive, BOD 18-01, required agencies to set "a DMARC policy of 'reject' for all second-level domains and mail-sending hosts", and notes that p=none "doesn't actually delay or stop unauthenticated mail from being delivered".
Example records
These are examples for example.com:
; Spoofable: monitoring only
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
; Protected main domain, but subdomains left open
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=none; rua=mailto:dmarc@example.com"
; Protected, including subdomains and non-existent subdomains
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
How do Microsoft 365 and Gmail treat a domain without an enforcing policy?
Large receivers still run their own spoofing checks, but your policy decides how firmly they act. Google says a none policy means "take no action on the message and deliver it to the intended recipient", quarantine means mark it as spam, and reject means reject it (Google Workspace Admin Help).
Microsoft 365 records the outcome in a composite authentication (compauth) result. Reason code 000 means the message failed DMARC "and the DMARC policy action is p=quarantine or p=reject". Code 001 means it failed implicit authentication because the domain "didn't have email authentication records published, or if they did, they had a weaker failure policy (SPF ~all or ?all, or a DMARC policy of p=none)" (Microsoft Learn). With no DMARC record at all, Microsoft can report dmarc=bestguesspass, its own inference.
So a spoof of a weakly protected domain may still be caught, but by guesswork. Smaller mail servers often have nothing similar. You can see the same composite results in your own headers with the Microsoft 365 header decoder.
Which gaps do quick checks miss?
A green result on your main domain isn't the whole picture. Check these too:
- Subdomains.
sp=noneor a weaker record on a subdomain such asmail.example.comreopens spoofing there. RFC 9989 appliesspto existing subdomains andnpto non-existent ones; if both are absent,papplies. See our guide to the DMARC subdomain policy. - Parked and unused domains. Domains that never send mail need
v=spf1 -allandp=reject. Microsoft says to configure them so "no email should ever come from those domains", including your*.onmicrosoft.comdomain if you don't send from it. Our parked domains guide has a checklist. - Broken SPF. More than 10 DNS lookups causes a permanent error, so SPF never passes. In our scan of the Tranco top 1,000 domains in October 2026, 22 domains broke the limit and 38.3% didn't enforce DMARC.
- Your own tenant's back doors. In Microsoft 365, Direct Send can let outsiders deliver mail that looks internal straight to your mailboxes.
Should I send a spoofed test email?
Usually you don't need to. Public DNS shows whether receivers are asked to block forged mail, and that's what a live test would reveal. If you do want proof, keep it controlled:
- Get written approval from whoever owns the domain.
- Send only to a mailbox you control at an outside provider, such as a personal Gmail or Outlook.com account.
- Send from a server that isn't in your SPF record and doesn't sign with your DKIM key.
- Check where it landed and read the Authentication-Results header. At
p=reject, Microsoft says failing mail is "Rejected during SMTP (550 5.7.1)" when its Honor DMARC setting is on.
Never send test spoofs to customers, suppliers or anyone outside the test.
How do I fix a spoofable domain?
Fix it in this order, so you don't block your own mail:
- Publish
p=nonewith a reporting address if you have no record yet. - Read the aggregate reports for a few weeks and list every service that sends as your domain. The DMARC Report Analyzer reads them in your browser.
- Make each sender pass with alignment, ideally with DKIM signing as your domain. See authenticating third-party senders.
- Move to
p=quarantine, thenp=reject. Our staged rollout guide has a timeline. Google recommends starting atnoneand moving to quarantine or reject over time. - Lock down parked domains with
p=rejectstraight away; they have no legitimate mail to break.
The full walkthrough is in how to stop email spoofing of your domain.
What can't a domain check tell you?
A domain check only covers exact-domain spoofing. It can't tell you whether:
- Someone has registered a lookalike domain such as
examp1e.com. Try the Lookalike Domain Generator to see which variations exist. - Attackers are using display-name spoofing from free email accounts. See display name spoofing.
- One of your mailboxes is compromised, in which case the attacker's mail passes every check.
- Your inbound mail is filtered well. These records protect other people from forgeries of your domain; they don't filter what you receive.
Next steps
- Run the free Email Health Check on every domain you own and note any that aren't at
p=quarantineorp=reject. - Fix parked domains first, then work your sending domains toward
p=rejectusing the reports. - Check
sp=and any subdomain records so they don't undo your main policy. - For the attacks DMARC can't stop, iBlockSpam filters inbound phishing and spoofing at the MX, and its DMARC monitoring shows who sends as your domain and when you're ready for reject.
Browse our other SPF, DKIM and DMARC guides.
Frequently asked questions
Is my domain spoofable if DMARC is set to p=none?
Yes. RFC 9989 says a p=none policy must not change how receivers handle mail, so forged messages are judged only by each receiver's own filters. CISA puts it plainly: p=none doesn't delay or stop unauthenticated mail from being delivered. It's a monitoring stage on the way to quarantine or reject, not protection.
Can a domain with SPF but no DMARC be spoofed?
Yes. SPF checks the hidden envelope sender, not the From address people see, so an attacker can use their own bounce domain that passes SPF while showing your domain in From. Without DMARC, nothing ties the two together or asks receivers to reject the mismatch. Microsoft 365 marks such domains as having no explicit policy and falls back on its own spoof detection.
Can attackers still impersonate my company if I use p=reject?
Yes, just not with your exact domain. DMARC at p=reject stops forged mail that uses your domain in From at receivers that honor it. It doesn't stop lookalike domains such as a swapped letter, display-name tricks from free email accounts, or attacks sent from a hacked real mailbox, which passes every check. Those need inbound filtering and user awareness.
Is it legal to send a spoofed test email to check my domain?
Testing your own domain against mailboxes you control is a common admin task, but get written approval from the domain owner first and never send test spoofs to outside recipients. Most checks don't need a live test at all: the public DNS records show whether receivers are asked to block forged mail.
Do subdomains need their own DMARC record to be protected?
Not usually. Under RFC 9989, the organizational domain's record covers its subdomains, using the sp tag for existing subdomains and the np tag for subdomains that don't exist, or the p tag if those are absent. A subdomain only needs its own record when you want a different policy, and a weaker one there reopens the gap.
Sources
- RFC 9989: Domain-based Message Authentication, Reporting, and Conformance (DMARC), sections 4.7, 4.10.1 and 5.4
- RFC 7208: Sender Policy Framework (SPF)
- Microsoft Learn: Set up DMARC to validate email in Microsoft 365
- Microsoft Learn: Anti-spam message headers (composite authentication reason codes)
- Google Workspace Admin Help: Set up DMARC
- CISA: Binding Operational Directive 18-01, Enhance Email and Web Security
See how your domain measures up
Run a free Email Health Check: MX, SPF, DKIM, DMARC and transport security in one scan, with the raw records shown. No sign-up.
Keep reading
Moving DMARC from p=none to p=reject: a staged rollout for small businesses
A staged plan to move DMARC from monitoring to reject without blocking your own mail, including what changes when a filtering gateway sits in front.
9 min read SPF, DKIM & DMARCHow to stop others sending email as your domain
Stop criminals sending email as your domain: the DMARC path to p=reject, SPF and DKIM, subdomains and parked domains, monitoring, and what DMARC can't stop.
9 min read SPF, DKIM & DMARCHow do you authenticate third-party senders with SPF, DKIM and DMARC?
Make CRMs, helpdesks, newsletters and invoicing tools pass DMARC: inventory senders, set up aligned DKIM and return-path, or move them to a subdomain.
9 min read