Outlook · Microsoft 365 · Email authentication

550 5.7.515 / 5.7.509 “Access denied”: your domain’s email is being rejected — here is the fix, in the right order

First published 19 October 2026 · Verified against Microsoft Learn and Microsoft Support documentation (links at each step) · This guide covers both error codes, because they look alike and are constantly confused.

The fast answer

Do not change any DNS yet. First, read your bounce message and find which of these two errors you actually have — the fix order depends on it:

  • “…does not pass DMARC verification and has a DMARC policy of reject” → that is 550 5.7.509. A receiving server is enforcing your own DMARC p=reject policy against your own mail, because your messages are failing DMARC. Usual cause: DKIM was never switched on for your custom domain in Microsoft 365, or SPF is broken. It can hit a business of any size.
  • “…does not meet the required authentication level” → that is 550 5.7.515, from Outlook.com / Hotmail. Under Microsoft’s high-volume sender rules, SPF and DKIM must each pass and a DMARC record must exist. A bounce can show DMARC= Pass and still be rejected because one leg failed.

Both are fixed by the same work, in this order: diagnose → SPF → DKIM → DMARC. The full procedure, with the exact records, is below.

What you are looking at, in plain words

When your email arrives, the receiving server runs three identity checks on your domain:

CheckWhat it provesWhere it lives
SPF“This server is allowed to send for my domain.”A TXT record on your domain
DKIM“This message was signed by my domain and not altered.”Two CNAME records + a switch in Microsoft 365
DMARC“At least one of SPF or DKIM passed and matches my From domain — and here is what to do if neither does.”A TXT record at _dmarc

The word that causes most of the pain is alignment: a check only counts for DMARC if the domain it passed for is the same domain your customers see in the From address. Microsoft 365, left on its defaults, signs your mail with your onmicrosoft.com domain — which never aligns with your real domain. That single default is behind a large share of these bounces.

SPF Allowed to send? DKIM Signed by my domain? DMARC ALIGNMENT Must match the From domain PASS → INBOX Delivered normally FAIL → 550 Rejected or spam
The three checks, and the one word that decides everything: alignment. A pass only counts when its domain matches the domain in your From address.
550 5.7.515 Microsoft’s high-volume gate Outlook.com / Hotmail / Live recipients 5,000+ messages a day from one From domain It demands ALL of: • SPF — pass • DKIM — pass (one aligned leg is not enough) • DMARC record present, aligned 550 5.7.509 Your own DMARC, enforced on you Any receiver that enforces DMARC Fires at any volume — no threshold It means: • Your policy says p=reject • Neither SPF nor DKIM aligned • So your own rule bounces your mail
The two errors this page fixes — same family, different diseases. The bounce’s exact wording tells you which one you have. Diagram: Merroway, drawn from Microsoft’s published sender requirements.

Step 0 — Prove which part is failing (5 minutes, no changes)

  1. Open the full bounce message and copy the verdict line. Real bounces spell it out, for example: Spf= Fail , Dkim= Pass , DMARC= Pass. Whichever item says Fail is your broken leg.
  2. Look up what your domain currently publishes. In any DNS checker, look up: the TXT record at your root domain (your SPF — there must be exactly one starting v=spf1); the TXT record at _dmarc.yourdomain (your DMARC and its p= value); the CNAME records at selector1._domainkey.yourdomain and selector2._domainkey.yourdomain (your DKIM — missing CNAMEs mean DKIM was never set up).
  3. Write down what you found before touching anything. Every fix below starts from this picture.
  4. Draw the path your mail actually takes. In the Exchange admin center, open Mail flow → Connectors. If a connector routes your outbound mail through a separate filtering or security service, that service is part of your sending path — it must sit inside your SPF record, and anything it changes in a message can break DKIM (there is a ladder rung for exactly this below). A domain can have perfect records for a path its mail never takes.
SAMPLE HEADER
Authentication-Results: mx.microsoft.com; spf=fail (sender IP is 203.0.113.24) smtp.mailfrom=contoso.com dkim=pass header.d=contoso.com header.s=selector1 dmarc=pass action=none header.from=contoso.com
Do this: open your bounced message’s full headers and find the Authentication-Results block. Read the three verdicts, not the noise around them. This sample is the classic 5.7.515 trap: DMARC says pass, yet the mail still bounced — because Microsoft’s high-volume gate demands SPF and DKIM, and the red line is the one that failed. Sample values; your domain and selector will differ.
Your mailboxMicrosoft 365Filter / gateway?only if a connector sends mail hereReceiving serverruns SPF · DKIM · DMARCIf the middle box exists: it belongs in your SPF — and it must never edit a signed message.
Do this: draw your own path before touching DNS. Most small businesses have no middle box — mail goes straight out. If yours does, every later step must include it.
Do not fix the wrong thing first. If DKIM is your failing leg, editing SPF will not help, and every extra record you add makes the real diagnosis harder. Microsoft’s own guidance is a gradual, verify-as-you-go approach — enforcement last, not first.
STEP 0Diagnoseread the verdictsFIX 1SPFone record onlyFIX 2DKIMturn signing onFIX 3DMARCclimb, don’t jumpPROVE ITVerifytest + read headers
The order this page follows — every step is verified before the next one begins. Skipping ahead is how domains end up more broken than they started.

Fix 1 — SPF: one record, the right include, under the limit

There is nothing to set inside Microsoft 365 for SPF — the record lives at your DNS host. For a domain that sends only through Microsoft 365, the official record is:

v=spf1 include:spf.protection.outlook.com -all
  1. If a v=spf1 record already exists, edit it — never add a second one. Two SPF records on the same name cause a permanent error (permerror) and fail everything.
  2. Add the include: for every other service that sends as your domain (your invoicing tool, your shop, your newsletter) into that same single record, before the -all.
  3. Count your lookups: include:, a, mx, exists and redirect each cost lookups, and the limit is 10. Over the limit = permerror = SPF fails for everyone.
  4. Each subdomain that sends (for example marketing.yourdomain) needs its own SPF record — the root record does not cover it.
Your DNS host → Add record (Cloudflare layout shown — every host has these same fields)
Type1TXT
Name2@  (your domain root — some hosts want it left blank)
Content3v=spf1 include:spf.protection.outlook.com -all
TTLAuto
Save
Do this: one TXT record at the root. If a v=spf1 record is already there, edit that one — a second SPF record breaks both. Add an include: for every other service that sends as your domain before the -all, and keep the whole record under the 10-lookup limit. Field map drawn by Merroway from the documented fields; values are Microsoft’s official record.

Source: Microsoft Learn, Set up SPF to identify valid email sources for your Microsoft 365 domain. · Practitioner sources for the mail-path and post-signing rungs: Our Cloud Network — Fix Error 550 5.7.509; Suped — 550 5.7.515 despite correct authentication

Fix 2 — DKIM: the step most businesses were never told about

Until you switch it on, Microsoft 365 does not sign mail from your custom domain in a way that can align. Here is the exact procedure:

  1. Open the Microsoft Defender portal: security.microsoft.com → Email authentication settings (Email & collaboration → Policies & rules → Threat policies → Email authentication settings).
  2. Select the DKIM tab. Find your custom domain and slide its toggle from Disabled to Enabled.
  3. Microsoft Defender portal, Email authentication settings, DKIM tab: a custom domain listed with status NoDKIMKeys and the signing toggle DisabledClose-up of the domain row: status NoDKIMKeys and the Disabled signing toggle
    The screen this fix lives on — Defender portal → Email authentication settings → DKIM tab. A domain that was never set up looks exactly like the top row: Status NoDKIMKeys, Toggle Disabled (red box, enlarged below it). Screenshot: Microsoft Defender portal, Microsoft Learn interface excerpt via Palisade.
  4. A “Client error” dialog appears — this is expected. It contains the exact CNAME values your tenant needs. Select OK. The domain’s status becomes CnameMissing.
  5. Click the domain row to open its details, and in the Publish CNAMEs section, copy the two CNAME values exactly as shown. Do not copy values from any blog post, video, or this page — the targets contain a tenant-specific part that only your portal knows. Microsoft states this warning itself: the published example values “are for illustration only.”
  6. Domain details flyout in the Defender portal: status reads No DKIM keys saved for this domain, with the Create DKIM keys button marked in redClose-up of the Create DKIM keys button
    Clicking your domain opens this flyout. If it says “No DKIM keys saved for this domain”, press Create DKIM keys (marked, enlarged below) — the portal then shows the two CNAME values that only your tenant knows. Screenshot: Microsoft Learn interface excerpt via Palisade; red mark by Merroway.
  7. At your DNS host, create both CNAMEs. The host names are selector1._domainkey and selector2._domainkey. If your DNS host automatically appends your domain (GoDaddy does this, for example), enter only selector1._domainkey — entering the full name creates a doubled domain and the status stays on CnameMissing. Create a CNAME, not a TXT record, and set TTL to at least 3600 (one hour) on both.
  8. Your DNS host → Add record — create this record TWICE (selector1, then selector2)
    TypeCNAME
    Nameselector1._domainkey  then  selector2._domainkey
    Contentthe value from Publish CNAMEs in YOUR portal flyout — never from a website
    ProxyDNS only (Cloudflare: grey cloud) — a proxied CNAME hides the key
    Save
    Do this: both records, exactly as your flyout shows them, then wait for them to resolve before sliding the signing toggle on. If your host appends your domain automatically, the Name is just selector1._domainkey — never type the domain twice. Field map drawn by Merroway.
  9. Wait a few minutes (Microsoft says detection takes “a few minutes, or possibly longer”), return to the flyout, and turn on Sign messages for this domain with DKIM signatures. Success looks like: toggle Enabled, status “Signing DKIM signatures for this domain”.

Source: Microsoft Learn, How to use DKIM for email in your custom domain.

Fix 3 — DMARC: climb the ladder, don’t jump it

DMARC also lives at your DNS host, as a TXT record at the host name _dmarc. The safe order — this is Microsoft’s documented rollout — is:

  1. Monitor first: v=DMARC1; p=none; pct=100; rua=mailto:you@yourdomain — mail flows normally while reports show you every service sending as your domain and which ones fail.
  2. Then quarantine: raise to p=quarantine once your real senders all pass (you can ramp pct= gradually).
  3. Reject last: p=reject only when reports are clean. Save the parent domain for last if you also run subdomains.
The p=reject trap. If your domain is hard-down right now because p=reject was switched on before your own mail was aligned (a security checklist or one-click tool did this to many small businesses), do Fix 2 first — most cases clear with no policy change at all. If you must relieve pressure today, step p=reject back to p=quarantine or p=none temporarily while you finish the fixes, then climb back up. Know the cost: at p=none your domain has no spoofing protection. And never delete the DMARC record entirely — Outlook.com’s rules require one to exist, so deletion trades this bounce for the 5.7.515 bounce.

Source: Microsoft Learn, Set up DMARC to validate email in Microsoft 365. Error texts: Exchange Online NDR reference (5.7.509) and Microsoft Support, Fix NDR error 550 5.7.515 in Outlook.com.

Your DNS host → Add record
TypeTXT
Name_dmarc
Contentv=DMARC1; p=none; pct=100; rua=mailto:you@yourdomain
TTLAuto
Save
Do this: start at p=none and read the reports that arrive at your rua address. Climb only when every real sender passes: p=none → p=quarantine → p=reject. Field map drawn by Merroway; the record is the documented starting point from Microsoft’s rollout.

Prove it worked

  1. Send a message from your Microsoft 365 account to a mailbox outside your organisation (a personal Gmail or Outlook.com account works). Testing inside your own domain proves nothing — no DKIM signature is added to internal mail.
  2. In that mailbox, open the message’s full headers (“Show original” in Gmail, or paste the headers into Microsoft’s own Message Header Analyzer).
  3. Find Authentication-Results. You want all three, with your own domain on them: spf=pass, dkim=pass with header.d= showing your domain (not onmicrosoft.com), and dmarc=pass.
  4. SAMPLE HEADER — WHAT FIXED LOOKS LIKE
    Authentication-Results: mx.google.com; spf=pass smtp.mailfrom=contoso.com dkim=pass header.d=contoso.com header.s=selector1 dmarc=pass header.from=contoso.com
    Do this: compare your test message’s three lines with this sample. All three pass, and the domains on them are yours — if header.d= shows an onmicrosoft.com address instead, Fix 2 has not taken effect yet.
    Also confirm the DNS side from your own computer. On Windows: nslookup -type=CNAME selector1._domainkey.yourdomain and the same for selector2. On macOS or Linux: dig CNAME selector1._domainkey.yourdomain +short. Each should return a target ending in dkim.mail.microsoft or onmicrosoft.com.
Timing honesty: DNS changes can take from a few minutes to 48 hours to be visible everywhere, and Microsoft’s own portal can lag behind reality. If a check fails in the first hour after a correct change, wait and re-test before changing anything else. Changing records repeatedly during propagation is how a one-hour problem becomes a three-day one.

Still bouncing? Work this ladder in order

  1. A tool sends as you, and it is not authenticated. Invoicing, your shop platform, a CRM or a newsletter tool sending “from” your domain needs its own place in your SPF record and ideally its own DKIM signing with your domain — or it should send from a subdomain you authenticate separately. This is the most common reason a “fixed” domain still bounces.
  2. SPF and DKIM pass, but DMARC still fails. That is alignment: compare the bounce’s smtp.mailfrom= and header.d= domains against your From domain. If either shows a different domain (a vendor’s domain, or onmicrosoft.com), that leg does not count, however green its “pass” looks.
  3. Your mail leaves through a filter or gateway that is not in your records. Step 0’s connector check names it: an outbound filtering service sends on your behalf, so its servers belong in your SPF record, and DKIM signing must be arranged so the signature survives the trip — sign before it only if it passes messages untouched; otherwise the last system in the path must be the one that signs. Until the path and the records describe the same journey, DMARC keeps failing behind correct-looking DNS.
  4. DKIM passes in tests but fails on real mail. Something is editing messages after they are signed — a gateway adding a disclaimer or footer, a tool rewriting links for tracking, a filter re-wrapping the message. Any change to the signed body breaks DKIM’s body hash, however perfect the DNS is. Make the message final before it is signed, and stop every later system from editing signed mail.
  5. permerror in the results. Two SPF records, or more than 10 DNS lookups in one record. Merge into a single record and remove tools you no longer use.
  6. DKIM status stuck on CnameMissing. Work Microsoft’s own mistake list: host name entered with the full domain appended twice; a TXT record created instead of a CNAME; only selector1 created; TTL under 3600; or a target typed by hand instead of copied from your portal. The portal values are the only correct values.
  7. Only mail to Outlook.com / Hotmail bounces, everything else is fine. After you have verified all three checks genuinely pass and align, this can be a sender-reputation or listing issue on Microsoft’s consumer side. That is the honest last rung: Microsoft’s Outlook.com deliverability support is the route, and it is a process, not a setting.

Mistakes that make it worse

  • Adding a second SPF record instead of editing the existing one.
  • Copying DKIM CNAME values from a blog, video or another company’s screenshot.
  • Raising DMARC to p=reject before every real sender passes.
  • Deleting DMARC to “stop the bounces”.
  • Changing three records at once, then being unable to tell which change helped or hurt.

FAQ — the issues behind this error, answered

What is the difference between 550 5.7.515 and 550 5.7.509?

5.7.509 is DMARC policy enforcement: a receiver honoured your domain’s p=reject because the message failed DMARC — any sender volume, any receiver that enforces DMARC. 5.7.515 is Outlook.com’s high-volume sender rule (5,000+ messages a day to Microsoft consumer mailboxes from one From domain), where SPF and DKIM must each pass and a DMARC record must exist. Same cure, different door.

My bounce says DMARC = Pass. Why was I rejected?

Under the 5.7.515 rules, read the individual Spf= and Dkim= verdicts. DMARC can pass on the strength of one aligned leg while the other leg fails — and that failing leg is enough for rejection. Real bounces reported under Microsoft’s own announcement show exactly this pattern, in both directions.

I am a small business. I do not send 5,000 emails a day.

Then your error is most likely 5.7.509, which has no volume threshold at all. Check the exact wording in your bounce — “policy of reject” means 5.7.509, whatever the subject line of the forum post you found called it.

Sources

Microsoft Learn — Email non-delivery reports in Exchange Online · SPF setup for Microsoft 365 · DKIM for your custom domain · DMARC setup for Microsoft 365 · Microsoft Support — Fix NDR error 550 5.7.515 · Microsoft Message Header Analyzer.

Verification note: error texts, record values, portal navigation, limits and rollout order on this page were checked against the official Microsoft pages listed above on 19 October 2026. If Microsoft changes a portal path or a rule, this page’s changelog will say so here.