The short version

Mail Microsoft 365 sends from your domain passes DMARC only when it is DKIM signed with your domain, or sent with a bounce address on your domain. Set up DKIM first: it is the fix that survives forwarding.

1. DKIM with your domain

Publish the two selector1/selector2 CNAMEs Microsoft Defender shows for the domain, then enable DKIM signing for it.

Microsoft 365's own instructions: Microsoft 365 documentation.

2. SPF

Add include:spf.protection.outlook.com to your domain's SPF record. Mail from your own mailboxes is sent with your domain as the envelope sender, so SPF passes aligned.

example.com.  TXT  "v=spf1 include:spf.protection.outlook.com ~all"

Merge it into your one existing SPF record rather than adding a second, and keep the total under 10 lookups: the SPF Check counts them.

3. Check it worked

  1. Send a message through Microsoft 365 to an outside mailbox and open its headers. The DKIM-Signature should show d=example.com, your domain; its s= tag is the selector.
  2. Look the selector up with the DKIM Inspector to confirm the key is published.
  3. In your DMARC reports, Microsoft 365's traffic should now pass DMARC. In DMARCLoop it moves from Known sender, failing to Compliant on the domain's Sources tab.

4. DMARC

If your domain has no DMARC record yet, publish one at p=none with a report address, so you can see every service sending as your domain before you tighten the policy. Build it with the DMARC Record Wizard, and see how to publish a DMARC record for the path to p=reject: quarantine by day 30, reject from day 60.

Other services like Microsoft 365