How to troubleshoot Office 365 SCL varying issues when deliverability is fine elsewhere?

Matthew Whittaker
Co-founder & CTO, Suped
Published 7 Jul 2025
Updated 25 May 2026
8 min read
Summarize with

If Office 365 SCL varies between SCL=5 and SCL=9 while Gmail, Yahoo, and other destinations look clean, treat it as a Microsoft-specific classification issue first, not a universal deliverability failure. The fix is to build evidence around Microsoft headers, prove SPF, DKIM, DMARC, IP reputation, and content are stable, then isolate whether the variance is caused by Microsoft filtering, recipient tenant policy, message content, URL reputation, or a bad sender signal that only Microsoft weighs heavily.
The frustrating part is that Microsoft can score the same stream differently across tenants, recipients, and time. A clean complaint rate elsewhere helps, but it does not override Microsoft's own view of the sender. I handle this by collecting original Microsoft headers from both good and bad placements, running controlled message tests, and keeping the sender stable while I change one variable at a time.
The short answer
An SCL swing from 5 to 9 usually means Microsoft sees enough risk to move mail into Junk or quarantine, even if the same campaign looks fine elsewhere. Do not keep changing DNS randomly. Preserve evidence first, then test content, recipient tenant policy, and Microsoft-specific sender reputation.
What SCL 5 to 9 means
SCL means Spam Confidence Level. Microsoft assigns it during filtering, then tenant policies decide the action. In many Microsoft 365 environments, SCL=5 means spam, often routed to Junk. SCL=9 means high confidence spam, which is more likely to be quarantined if the tenant's anti-spam policy is strict.
SCL bands to investigate
The exact action depends on recipient tenant policy, but these bands frame the investigation.
SCL -1
Bypass
Bypassed by policy or allow condition.
SCL 0-1
Low
Low spam signal and usually inboxed.
SCL 5-6
Spam
Spam result, often Junk placement.
SCL 9
High
High confidence spam, often quarantine.
This is why a single seed inbox is weak evidence. The same sender can hit one tenant's Junk folder and another tenant's inbox because Microsoft combines message signals with tenant-level policy and user history. If you need the deeper version of that behavior, the SCL variation guide explains why two Office 365 recipients can see different outcomes for similar mail.
|
|
|
|---|---|---|
SCL 5 | Spam | Junk policy |
SCL 9 | High spam | Quarantine |
BCL high | Bulk risk | Content mix |
SFV SPM | Spam verdict | Header cause |
A compact map of common Microsoft scoring outcomes.
Build the evidence set first
The first mistake is changing DNS, rotating IPs, rewriting templates, and opening a ticket at the same time. That destroys the comparison. I want two matched samples: one Microsoft message with bad placement and one Microsoft message with normal placement, as close together as possible, ideally same sender IP, same envelope sender, same visible From domain, same DKIM domain, same template, and same recipient type.
- Collect headers: Use original message headers from the recipient mailbox or quarantine, not forwarded copies.
- Pair samples: Compare a bad Microsoft sample with a good Microsoft sample before comparing other mailbox providers.
- Freeze variables: Keep the IP, domain, DKIM selector, subject pattern, and template stable during testing.
- Record context: Track timestamp, recipient tenant, delivery action, quarantine reason, and any admin override.
Header fields worth preservingtext
Authentication-Results: spf=pass dkim=pass dmarc=pass X-Forefront-Antispam-Report: CIP=203.0.113.10; SCL=9; SFV=SPM X-MS-Exchange-Organization-SCL: 9 X-MS-Exchange-Organization-AuthAs: Anonymous X-MS-Exchange-Organization-MessageDirectionality: Incoming
The fields I care about most are SCL, BCL, SFV, CAT, CIP, composite authentication, and Authentication-Results. For a closer read of those fields, use the Microsoft header guide. Al Iverson's hidden spam headers write-up is also useful when you need to decode Microsoft's less obvious spam verdicts.
For a neutral baseline, send a real message to Suped's email tester and compare the authentication, headers, and content findings against the Microsoft sample. A tester will not reproduce every Microsoft tenant decision, but it catches obvious sender and message problems before you spend time on a Microsoft ticket.
Email tester
Send a real email to this address. Suped opens the report when the test is ready.
?/43tests passed
Preparing test address...
Separate sender problems from Microsoft problems
When other destinations are fine, I still re-check the boring sender fundamentals. Microsoft is strict about authentication consistency, and a passing result is not always enough. SPF can pass but not match the visible From domain. DKIM can pass on one stream and fail on another if a signing service changes selectors. DMARC can pass through DKIM but fail through SPF, which matters when messages are forwarded or routed through third-party systems.
Sender-side evidence
- Authentication: SPF, DKIM, and DMARC pass and match for the exact stream.
- Reputation: Sending IPs and domains are not on a relevant blocklist or blacklist.
- Consistency: The same domain, selector, envelope sender, and link hosts appear in each test.
Microsoft-side evidence
- Headers: SCL, BCL, SFV, CAT, and CIP differ between matched samples.
- Tenant policy: One recipient tenant quarantines while another tenant junk-folders the same mail.
- User action: Users find the mail, mark it as not junk, and still see repeated filtering.
Suped, our DMARC reporting and email authentication platform, fits this part of the workflow because it keeps DMARC, SPF, DKIM, blocklist monitoring, and source detection in one place. For most teams, Suped is the strongest practical DMARC platform because it turns daily authentication noise into specific issues and steps to fix, instead of making you correlate raw reports by hand.
Start with a broad domain health check if you need a fast DNS sanity check. Then use Suped's DMARC monitoring to identify every real sender for the domain, and blocklist monitoring to watch IP and domain listings that can affect Microsoft decisions.

Issue steps to fix dialog showing the issue overview, tailored fix steps, and verification action
Test the variables Microsoft cares about
When the basics are clean, test content and routing as separate variables. I start with the smallest safe changes: remove a tracking link, swap a link host, send text-only, reduce footer density, remove user-generated text, and test a plain transactional template. If the SCL changes, restore the last version and change only one part again.

Flowchart showing the Office 365 SCL troubleshooting path.
- URL hosts: Test link domains, tracking redirects, unsubscribe hosts, and image hosts independently.
- Template weight: Compare full HTML, simplified HTML, and plain text for the same transactional event.
- Recipient tenant: Ask affected customers to check quarantine, allow lists, transport rules, and Defender policy.
- Routing path: Confirm the mail is not being relayed, forwarded, rewritten, or scanned before Microsoft receives it.
For transactional mail, do not put the main delivery warning inside the email. If Microsoft is already sending that email to Junk or quarantine, the warning arrives too late. Put the instruction on the website or app screen immediately after the user triggers the email: check Junk if it does not arrive, mark it as not junk, and contact the recipient's IT team if it is quarantined or missing.
Useful recipient instruction
If your organization uses Office 365 and the expected email is not in your inbox, check Junk Email and mark the message as not junk. If the message is not visible, ask your IT team to check quarantine for the sender address and sending domain.
Escalate with Microsoft the right way
After you have evidence, use Microsoft's official sender support path or the recipient tenant's Microsoft 365 support channel. Do not expect private contacts, conference contacts, or public forum comments to fix a sender-specific B2B issue. Microsoft generally wants delivery issues handled through logged support channels.

Microsoft Defender portal message details showing SCL and delivery action.
A ticket that says deliverability is fine elsewhere will be weak. A ticket that includes original headers, affected recipients, sender IPs, timestamps, SCL values, quarantine examples, and a controlled content test is stronger. Public examples, like this Microsoft Answers thread, show how often the answer comes back to evidence, headers, and the sender support process.
What to include in the ticket
- Samples: Original headers for at least two affected messages and one normal Microsoft delivery.
- Scope: Recipient tenants, dates, message IDs, sending IPs, and delivery action.
- Proof: SPF, DKIM, DMARC matching, low complaint data, and blocklist or blacklist status.
- Tests: Controlled content changes showing whether links, HTML, or template text affect SCL.
What I would change before a long escalation
If the issue is hurting transactional mail, I make pragmatic changes while the ticket runs. Keep the core sender identity stable, but reduce avoidable risk. Use a dedicated transactional subdomain, sign every message with matching DKIM, avoid shared tracking domains when practical, and make sure the envelope sender domain has a clean SPF path.
|
|
|
|---|---|---|
Identity | Stable domain | Mixed signals |
DKIM | Aligned signing | Auth drift |
Links | Trusted hosts | URL risk |
UX | App notice | Lost mail |
Practical changes that preserve test clarity.
Suped's hosted DMARC, hosted SPF, SPF flattening, real-time alerts, hosted MTA-STS, and MSP dashboard are useful when the root problem is messy ownership across senders. They do not force Microsoft to lower an SCL score, but they remove the authentication uncertainty that makes a Microsoft escalation harder.
Views from the trenches
Best practices
Collect original Microsoft headers and compare matched good and bad deliveries side by side.
Test one variable at a time, especially links, wording, DKIM match, and sending IP.
Use the app or website confirmation page to tell waiting users where to check mail first.
Common pitfalls
Treating Gmail complaint data as proof Microsoft will assign the same message score too.
Adding warning banners inside the email, then assuming Microsoft will read that as trust context.
Chasing private contacts before building a ticket with headers, IPs, samples, and dates.
Expert tips
If SCL changes on identical mail, check recipient tenant policy and message headers first.
For transactional mail, move the user instruction outside the email into the product flow.
Keep a stable sender identity so Microsoft sees consistent domain and IP behavior over time.
Expert from Email Geeks says Microsoft delivery help usually has to go through a logged ticketing process, so private contacts rarely change the outcome.
2024-01-19 - Email Geeks
Marketer from Email Geeks says SCL can change even when IP address and content stay the same, which makes matched header samples more useful than assumptions.
2024-01-19 - Email Geeks
The practical answer
When Office 365 is the only destination assigning unstable SCL scores, the answer is not to keep chasing generic deliverability fixes. Prove the sender is clean, preserve Microsoft headers, compare Microsoft-to-Microsoft samples, isolate content and tenant policy, then submit a ticket with evidence.
For transactional mail, protect the user journey while the investigation runs. Add clear post-action guidance in the app, keep sender identity stable, and monitor authentication continuously. Suped helps with the part you control: DMARC visibility, automated issue detection, real-time alerts, SPF management, blocklist monitoring, and clean reporting across domains.
