Skip to main content
by DMARCguard Team
16 min read

Microsoft DMARC Enforcement: Setting Up DMARC for Office 365 and Microsoft 365

603,854 domains — 19.6% of every SPF-enabled domain in our 5.5 million-domain scan — route their mail through spf.protection.outlook.com. When Microsoft started enforcing DMARC for bulk senders to Outlook.com on May 5, 2025, it reshaped compliance for the largest email footprint on the internet (DMARCguard SPF Supply Chain Study, 2026; Microsoft Defender for Office 365 Blog, 2025-04-30).

Microsoft DMARC is not one thing but two: a sender-side enforcement regime for anyone emailing Outlook.com consumer mailboxes, and a tenant-side configuration burden for every Microsoft 365 Global Administrator. Miss either, and mail to @outlook.com, @hotmail.com, @live.com, and @msn.com starts bouncing with 550 5.7.515 Access denied.

By the end of this guide you will have a published DMARC record, a working SPF and DKIM stack in the Microsoft Defender portal, and a clear picture of how Microsoft, Google, and Yahoo treat DMARC differently in 2026.

Why Microsoft DMARC changed in 2025 (and what that means in 2026)

On April 2, 2025, Microsoft’s Defender for Office 365 team announced new bulk-sender requirements: domains sending more than 5,000 messages per day to Outlook.com consumer mailboxes must pass SPF, pass DKIM, and publish a DMARC record with at least p=none aligned to SPF or DKIM. The first draft routed failing mail to the Junk folder.

The version 4.0 update on April 30, 2025 replaced Junk-foldering with outright SMTP rejection effective May 5, 2025. Microsoft’s own words: “The rejected messages will be designated as 550; 5.7.515 Access denied, sending domain [SendingDomain] does not meet the required authentication level.” (Microsoft Tech Community, 2025-04-30).

The scope is narrower than most operators assume. The May 5, 2025 rule governs Outlook.com consumer inbound only — outlook.com, hotmail.com, live.com, and msn.com. Exchange Online tenant-to-tenant mail runs on a separate default, rolled out July 2023: inbound mail with p=reject is rejected with 550 5.7.509 when the recipient’s MX points to Office 365, governed by the tenant’s anti-phishing policy HonorDmarcPolicy toggle (Microsoft Learn, DMARC configure, 2025-05-07).

Between June 2025 and April 2026, Microsoft did not publish a follow-on escalation. The Outlook.com Postmaster Policies page (updated March 3, 2026) still anchors on the May 5, 2025 date and the 5,000-per-day threshold. Any domain sending commercial volume to Microsoft consumer mailboxes now treats DMARC as blocking, not optional.

Microsoft DMARC requirements at a glance

There are two audiences for Microsoft DMARC, and they are not the same.

Senders TO Outlook.com consumers. If your domain sends more than 5,000 messages per day to @outlook.com, @hotmail.com, @live.com, or @msn.com, you must publish SPF (aligned), DKIM (aligned), and DMARC at least p=none. Non-compliant mail is rejected with 550 5.7.515. Smaller senders are “strongly recommended” but not mandated (Outlook.com Postmaster, 2026-03).

Administrators OF Microsoft 365 tenants. Your outbound domains need SPF, DKIM, and DMARC so mail reaches every destination — Microsoft, Google, Yahoo, and the long tail. Inbound enforcement is governed by the anti-phishing policy’s Honor DMARC toggle; HonorDmarcPolicy=$true with DmarcRejectAction=Reject is the new-tenant default, but legacy tenants may still carry MoveToJmf.

“M365 DMARC” and “Microsoft 365 DMARC” are the same thing — M365 is Microsoft’s internal abbreviation. Setup, DNS, and enforcement are identical regardless of which phrasing your vendor documentation uses.

RequirementBulk sender to Outlook.com (>5,000/day)Exchange Online tenant (outbound)Exchange Online tenant (inbound)
SPF publishedMandatory, must passMandatory for every sending domainEvaluated against sender domain
DKIM signingMandatory, must passMandatory for custom domainsEvaluated against sender domain
DMARC policyAt least p=none, alignedStart p=none, progress to p=rejectHonored per anti-phishing policy
ARCRecommendedRecommended for forwardersTrusted ARC sealers opt-in
Non-compliance NDR550 5.7.515Dependent on destination550 5.7.509 for p=reject
Threshold5,000 messages/dayAny volumeAny volume
Microsoft DMARC requirements by audience and direction

How do I set up DMARC in Microsoft 365? (step-by-step)

The fastest path to set up DMARC in Office 365 is the same order Microsoft uses in its own documentation: publish SPF, enable DKIM signing in the Defender portal, then publish DMARC. Microsoft is explicit that the order matters — “Configure SPF, DKIM, and DMARC records (in that order) for all custom Microsoft 365 domains” (Microsoft Learn, MDO deployment guide).

Before you start. You need Global Administrator in Microsoft Entra plus Organization Management or Security Administrator in Exchange Online to access the Email authentication settings blade — Security Administrator in Entra alone cannot open it. The custom domain must already be verified in Microsoft 365; confirm with Get-AcceptedDomain.

Three facts to anchor in your head before you edit DNS:

  • SPF must include:spf.protection.outlook.com for any domain sending through Exchange Online.
  • DMARC lives at _dmarc.yourdomain.com as a TXT record starting v=DMARC1; p=none;.
  • Policy progression is p=nonep=quarantinep=reject, not “turn on reject immediately.”

Step 1 — Publish the SPF TXT record for Exchange Online

For a custom domain that sends only through Exchange Online (commercial or GCC), publish this single TXT record at the root of your sending domain:

SPF record for Exchange Online dns
example.com.   IN   TXT   "v=spf1 include:spf.protection.outlook.com -all"

TTL: 3600 seconds (one hour) minimum, per Microsoft’s guidance to avoid DNS lookup timeouts (Microsoft Learn, SPF configure, 2025-09-17). Use -all (hard fail) — Microsoft explicitly recommends it because DKIM and DMARC catch legitimate misalignments.

For hybrid Exchange environments, add IP literals or additional include: mechanisms alongside the Microsoft include:

SPF record for hybrid Exchange + marketing subdomain dns
example.com.             IN  TXT  "v=spf1 ip4:192.0.2.10 include:spf.protection.outlook.com -all"
marketing.example.com.   IN  TXT  "v=spf1 include:servers.mcsv.net include:spf.protection.outlook.com -all"

GCC High / DoD tenants use include:spf.protection.office365.us; 21Vianet tenants use include:spf.protection.partner.outlook.cn.

Watch the 10-DNS-lookup ceiling. Each include: costs at least one DNS lookup, and multi-vendor stacks (Microsoft 365 + Mailchimp + Salesforce + SendGrid + HubSpot) are routinely close to the limit. 148,655 domains in our 5.5 million-domain scan already exceed it and silently SPF-fail.

Step 2 — Enable DKIM signing in the Microsoft Defender portal

DKIM management lives in the Microsoft Defender portal at https://security.microsoft.com. Navigate: Email & collaboration → Policies & rules → Threat policies → Email authentication settings → DKIM tab. Shortcut: https://security.microsoft.com/authentication?viewid=DKIM (Microsoft Learn, DKIM configure, 2026-01-31).

Select your custom domain, locate the toggle labeled “Sign messages for this domain with DKIM signatures” (default: Disabled), and publish the two CNAME records the flyout shows at your external DNS host.

For newly onboarded custom domains, the May 2025 format change means CNAMEs now target .dkim.mail.microsoft with a dynamic partition (k-v1, r-v1):

DKIM CNAMEs — new .dkim.mail.microsoft format (post-May 2025) dns
selector1._domainkey.example.com.   IN   CNAME   selector1-example-com._domainkey.example.k-v1.dkim.mail.microsoft.com.
selector2._domainkey.example.com.   IN   CNAME   selector2-example-com._domainkey.example.k-v1.dkim.mail.microsoft.com.

TTL: 3600. Pre-May-2025 tenants still use the legacy format with .onmicrosoft.com:

DKIM CNAMEs — legacy .onmicrosoft.com format dns
selector1._domainkey.example.com.   IN   CNAME   selector1-example-com._domainkey.contoso.onmicrosoft.com.
selector2._domainkey.example.com.   IN   CNAME   selector2-example-com._domainkey.contoso.onmicrosoft.com.

Copy the CNAME target exactly as the portal shows it. A common 2025–2026 failure mode: following a third-party walkthrough that predates the May 2025 selector format and using .onmicrosoft.com targets for a domain Microsoft now expects on .dkim.mail.microsoft (Microsoft Q&A, 2025-09-08).

After CNAMEs resolve, flip the toggle back to Enabled. Default key size is 2048-bit RSA; valid -KeySize values are 1024 or 2048. Rotation is admin-triggered through the “Rotate DKIM keys” button or Rotate-DkimSigningConfig in Exchange PowerShell. The .onmicrosoft.com MOERA domain has no automatic rotation cadence in 2026 — rotate it on the same schedule you rotate custom-domain keys.

Step 3 — Publish the DMARC TXT record

Microsoft cannot publish custom-domain DMARC from any admin portal — you edit your external DNS. The Defender portal and M365 admin center publish DMARC only for .onmicrosoft.com (Microsoft Learn, DMARC configure, 2025-05-07).

Microsoft’s recommended monitoring record for a custom subdomain:

DMARC record — monitoring mode dns
_dmarc.example.com.   IN   TXT   "v=DMARC1; p=none; pct=100; rua=mailto:[email protected]; ruf=mailto:[email protected]"

Microsoft documents only v, p, pct, rua, and ruf; for sp=, adkim=, aspf=, and fo=, Microsoft defers to RFC 7489. The default for pct is 100.

Need one generated for your own domain? Generate a Microsoft-ready DMARC record — pick your tenant type, paste your rua mailbox, and the generator outputs a record you can paste into your DNS host.

Two operational notes:

  • Point rua= at a dedicated mailbox or Microsoft 365 Group, never a user’s personal mailbox. Aggregate reports arrive as gzipped XML attachments.
  • Do not rely on ruf=. Microsoft 365 never emits forensic reports, regardless of whether a valid ruf=mailto: address exists in your record.

Step 4 — Walk p=none to p=quarantine to p=reject

Microsoft recommends a gradual rollout. Start with p=none and a valid rua= destination. Read aggregate reports for two to four weeks, identifying every legitimate sender that currently fails DMARC alignment. Fix those at the source — custom DKIM for your ESP, SPF include for your CRM, subdomain delegation for your transactional provider.

When the failing-source list is empty of legitimate mail, tighten the policy. Use pct= to ramp impact rather than flip from none to reject overnight. Microsoft’s documented progression is pct=10, pct=25, pct=50, pct=75, pct=100 at each stage.

At each step, measure two metrics: alignment rate (percentage of your mail passing SPF or DKIM aligned to the From domain) and failing-source count. Enforcement is only safe when alignment is above 99% and every failing source is known and intentional.

Step 5 — Protect MOERA and every parked domain

Microsoft auto-signs DKIM and auto-publishes SPF for *.onmicrosoft.com, but does not publish a DMARC TXT record for your tenant’s MOERA subdomain by default. Attackers spoof [email protected] and headers show dmarc=none because there is nothing to enforce (Microsoft Learn, MOERA step-by-step, 2025-09-04).

Close it. In the M365 admin center under Settings → Domains → your .onmicrosoft.com domain → DNS records, publish:

DMARC record for tenant MOERA domain dns
_dmarc.contoso.onmicrosoft.com.   IN   TXT   "v=DMARC1; p=reject; rua=mailto:[email protected]"

Apply the same p=reject posture on every registered-but-unused custom domain. Pair it with SPF v=spf1 -all and no DKIM record. Parked domains cost nothing to protect.

Microsoft-specific DMARC gotchas the official docs will not tell you

Most setup guides stop at the DNS record. The failures happen after that.

compauth reason codes change the delivery verdict. Microsoft stamps a composite authentication result in every Authentication-Results header. compauth=fail reason=000 means explicit DMARC fail on a p=quarantine or p=reject sender — the actual delivery outcome is set by DmarcRejectAction / DmarcQuarantineAction in your anti-phishing policy, not the DNS record. compauth=pass reason=130 means an ARC sealer rescued a genuine DMARC fail — the only reliable signal that ARC chain validation was load-bearing. compauth=none reason=905 means DMARC was silently skipped because complex routing hid the originating IP (Microsoft Learn, message headers, 2025-10).

Tenant-level HonorDmarcPolicy vs the policy you published. Verify with Get-AntiPhishPolicy | fl Name,HonorDmarcPolicy,DmarcQuarantineAction,DmarcRejectAction. New tenants default to $true, Reject, Quarantine. Legacy tenants may still carry MoveToJmf — your published p=reject becomes silent Junk-foldering instead of a 550 5.7.509 rejection.

sp= on a subdomain record is silently ignored. DMARC’s sp= tag is read only on the organizational domain. Publishing v=DMARC1; p=none; sp=reject on mail.example.com does nothing. For a specific subdomain, publish an explicit _dmarc.<sub> TXT with its own p=.

Outbound mail silently signs with .onmicrosoft.com and breaks alignment. If you miss Step 2 for any custom domain, Exchange Online signs with your tenant’s MOERA domain. The DKIM signature is valid but does not align with the custom From — DMARC fails the moment you move past p=none. Verify received mail shows dkim=pass header.d=<customdomain>.

Third-party gateway fronting EOP breaks DMARC without Enhanced Filtering for Connectors. With MX pointed at Mimecast, Proofpoint, or Barracuda, the last hop EOP sees is the gateway IP. Without EFC (Set-InboundConnector -EFSkipLastIP $true plus -EFSkipIPs populated with gateway egresses), SPF and DMARC evaluate against the gateway and fail on legitimate mail. Add the gateway as a Trusted ARC Sealer if it modifies messages.

Microsoft only sends rua reports when MX points directly at Microsoft 365, and never sends ruf. Hybrid routing and SEG-fronted routing both suppress Microsoft-originated aggregate reports. If your MX is pointed at anything other than *.mail.protection.outlook.com, rely on aggregated reporting from every other receiver (Google, Yahoo, Proofpoint) that your rua address collects.

Catching these in production takes a DMARC monitor, not a one-off check.

Microsoft vs Google vs Yahoo: the 2026 DMARC enforcement side-by-side

The three providers share direction — mandatory SPF, DKIM, DMARC for bulk senders — but differ on dates, thresholds, and exactly which SMTP code you see when mail fails.

Three-column comparison of Microsoft, Google, and Yahoo DMARC enforcement showing initial enforcement dates, bulk-sender thresholds, SMTP rejection codes, and ARC stances
Microsoft, Google, and Yahoo converge on the same endpoint — mandatory SPF, DKIM, and DMARC — but diverge on dates, thresholds, and the SMTP code you see when mail fails.
AreaMicrosoft (Outlook.com)Google (Gmail / Workspace)Yahoo (Yahoo Mail / AOL / AT&T)
Initial enforcement dateMay 5, 2025February 1, 2024February 2024
Follow-on escalationNone dated after May 2025November 2025 rampNone published
Bulk-sender threshold>5,000/day to Outlook.com~5,000/day to personal GmailNo numeric threshold published
Minimum DMARC policyAt least p=none, alignedAt least p=noneAt least p=none
SPF + DKIM both required (bulk)Both must pass individuallyBoth required, either alignedBoth required
ARC stanceRecommendedRequired for forwarded mailRecommended
Exact SMTP rejection code550 5.7.5155.7.26 permanent / 4.7.31 temporary553/554 generic
One-click unsubscribe mandatedNot mandated by nameYes, since June 1, 2024Yes, since June 2024
Spam complaint thresholdNot published0.10% target / 0.30% ceilingBelow 0.3%
Sends DMARC aggregate (rua)Yes, when MX points at M365YesNot published
Sends DMARC forensic (ruf)NoNot publishedNot published
Microsoft vs Google vs Yahoo DMARC enforcement in 2026

Sources: Outlook.com Postmaster Policies (2026-03), Google Workspace Admin Help 81126 and 14229414, Yahoo Sender Hub Best Practices, Yahoo Sender Hub FAQs.

Notes and conflicts. Microsoft’s Postmaster index (updated March 3, 2026) still describes Junk-foldering, while the Policies page and the April 30, 2025 Tech Community revision document active 5xx rejection — treat the latter two as authoritative. Google phrases its threshold differently between pages: “more than 5,000 messages per day” (81126) versus “close to 5,000 messages or more … within a 24-hour period” (14229414). For a deeper operator-level walkthrough, see our companion guide on Google and Yahoo’s sender requirements.

Microsoft 365 DNS record layout showing SPF TXT, two DKIM CNAMEs, and DMARC TXT stacked on a custom domain with arrows pointing to spf.protection.outlook.com and .dkim.mail.microsoft targets
A working Microsoft 365 setup publishes four DNS records: one SPF TXT, two DKIM CNAMEs, and one DMARC TXT.

How DMARCguard monitors Microsoft 365 DMARC results

Microsoft’s reporting stops where your environment leaves the Microsoft network. A DMARC monitor closes the gap.

  • Named sender identification on Microsoft 365 outbound. Rua reports show spf.protection.outlook.com as a sending source; DMARCguard resolves that to “Exchange Online” so you are not triaging IP literals.
  • Aggregate report ingestion from every receiver. When your MX does not point at Microsoft 365, Microsoft does not send rua — but Google, Yahoo, and a hundred smaller receivers still do. DMARCguard collects all of them at one rua mailbox.
  • ARC chain visibility. compauth=pass reason=130 means an ARC sealer rescued a DMARC fail. DMARCguard flags those so you know which forwarders are load-bearing and which are waste.

Frequently asked questions

What is Microsoft DMARC?

Microsoft DMARC describes how Microsoft’s two email footprints implement the DMARC standard (RFC 7489): Outlook.com consumer mailboxes enforce DMARC at the edge for bulk senders, and Exchange Online tenants honor inbound DMARC through anti-phishing policy and sign outbound DKIM for custom domains. Both run on the same protocol — the difference is where the enforcement lives. For the underlying standard, see our DMARC primer.

Does Microsoft 365 use DMARC?

Yes. Microsoft 365 honors sender DMARC on inbound mail when the recipient MX points to Exchange Online, signs outbound DKIM for custom domains once enabled, and sends DMARC aggregate (rua) reports to domains with a valid rua mailbox. Microsoft 365 never sends forensic (ruf) reports.

When did Microsoft enforce DMARC?

Microsoft enforced DMARC for Outlook.com consumer inbound on May 5, 2025, for domains sending more than 5,000 messages per day. Non-compliant mail is rejected with 550 5.7.515. Exchange Online tenant inbound has honored p=reject / p=quarantine by default since July 2023, using NDR code 550 5.7.509.

How do I set up DMARC in Office 365?

Publish an SPF TXT record with include:spf.protection.outlook.com, enable DKIM signing in the Defender portal by publishing the two portal-generated CNAMEs, then add a _dmarc.yourdomain.com TXT starting v=DMARC1; p=none; pct=100; rua=mailto:[email protected]. Monitor aggregate reports for two to four weeks, then progress p=none to p=quarantine to p=reject.

What is the difference between Microsoft 365 DMARC and M365 DMARC?

They are the same thing. M365 is Microsoft’s abbreviation; setup steps, DNS records, and enforcement behavior are identical regardless of which label vendor documentation uses.

Does Microsoft send DMARC aggregate reports?

Yes — to domains that publish a valid rua mailbox, but only when the recipient’s MX record points directly to Microsoft 365. Hybrid routing and SEG-fronted routing (Mimecast, Proofpoint, Barracuda fronting EOP) suppress Microsoft-originated rua generation. Microsoft 365 never sends forensic (ruf) reports.

Where to go from here

Microsoft DMARC is not a one-day project. The DNS records take an hour; the alignment work — matching every legitimate sending source against SPF or DKIM — takes weeks. Bulk senders to Outlook.com are out of time: since May 5, 2025, non-compliant mail is rejected, not Junked.

Start with a baseline: publish a record at p=none with a rua mailbox, and let two weeks of aggregate reports tell you what your environment actually looks like. If you also send to Gmail and Yahoo, pair this guide with the companion walkthrough on Google and Yahoo’s sender requirements linked in the comparison section above — the three providers converge on the same endpoint, but the operational details diverge enough to matter.