Blog · Deliverability

Why Outlook Sends a New Domain to Junk Even With Perfect SPF, DKIM, and DMARC

You set up SPF. You turned on DKIM. You published a DMARC record. The headers say pass on every field, and yet every message to a Microsoft 365 or Outlook.com recipient lands in Junk. Nothing is broken with your authentication. The problem is that authentication and content filtering are two separate decisions, and the second one is what is failing.

This is one of the most common confusion points in email deliverability. The fix is not more authentication work. It is understanding how Microsoft scores a message, why a brand new domain starts in the penalty box, and what to change about the message and the sending pattern to climb back out.

What SPF, DKIM, and DMARC actually verify

SPF answers whether the sending IP is authorized by the domain in the envelope-from address. DKIM answers whether the message body and a set of headers are signed by a key the signing domain publishes. DMARC answers whether the visible From domain is the same domain the SPF or DKIM result authenticated, and what to do when it is not.

None of these records answer "is this message spam." They answer "is this message from a domain the sender is allowed to use." That is the whole job. A perfectly passing message can still be spam. A perfectly passing message can still be unwanted. Authentication gives the receiver an accurate identity check, and then the receiver's content filter makes a separate decision about what to do with that message.

If your headers show pass, your authentication is working. The remaining problem is downstream of authentication.

How Microsoft's Exchange Online Protection actually scores a message

After the SMTP conversation is accepted, the message enters Exchange Online Protection, EOP, on the way to the recipient's mailbox. EOP runs the message body, headers, and sending context through a classifier and stamps a score.

The most important header to read is X-MS-Exchange-Organization-SCL, where SCL stands for Spam Confidence Level. Microsoft assigns an SCL between -1 and 9. SCL 5 and above typically routes the message to the Junk Email folder. SCL 9 on a stricter tenant routes it to Quarantine instead of Junk.

Authentication results feed into the SCL, but only as one input. The full list of inputs includes the sending IP reputation, the sending domain reputation, the bulk complaint level of the message content, content features like link shorteners and image ratios, the recipient's prior interaction with the sender, and any transport rules the receiving tenant has configured.

To see what Microsoft actually scored, pull the source of the message in Outlook and look at Authentication-Results, X-MS-Exchange-Organization-SCL, X-Forefront-Antispam-Report, and X-Microsoft-Antispam. The SCL value is the verdict. The Authentication-Results value is what Microsoft thought of your SPF, DKIM, and DMARC. The Authentication-Results header itself looks like a series of method blocks, one per check, for example spf=pass (sender IP is x.x.x.x) smtp.mailfrom=...; dkim=pass (signature verified) header.d=...;. Reading each method block tells the sender whether Microsoft saw the same pass they did.

Why a new domain hits Junk even with passing auth

A new domain has no history with Microsoft's reputation systems. The sending IP is new. The DKIM key, the reverse DNS, the From address, and the visible From domain are all new.

Microsoft's classifier defaults to treating unknown senders conservatively. That is the design, not a bug. Without any positive history, the classifier has no positive weight to set against the negative signals. The same message from a domain that has sent clean mail to the same tenant for two years will usually pass through the same filters without trouble.

This is why sending volume matters more than people expect. A brand new domain sending 5,000 messages on day one is treated very differently from the same domain sending 200 messages a day and ramping slowly. Confidence is built by what it finds about the sender, and it needs time to find things.

The content triggers that push a new domain over the threshold

The same message body that passes for an established sender can fail for a new one. The content signals that consistently push a new domain over the Junk threshold include link shorteners in the body (bit.ly, t.co, custom shorteners), image-heavy or all-image bodies with very little text, and certain phrases that drive the bulk complaint level up (free, guaranteed, limited time, act now, aggressive financial language). Attachments on first contact also hurt, especially ZIP, EXE, and macro-enabled Office files. A display name in the first note that says "Acme Bank" while the From address is noreply@newvendor123.com is a separate red flag.

Cleaning these up is the cheapest improvement. None of them require vendor cooperation or warmup time. They are message-level changes the sender controls directly.

The IP reputation question

Most senders start on a shared sending pool inside their email platform. The pool's reputation is partly the sender's, partly strangers'. On a shared pool the sender inherits the pool's spam history and is rewarded for clean sending only as one of many voices on the same IPs.

A dedicated IP starts at zero. The first 30 to 60 days of low-volume, well-formed mail builds the curve. Microsoft's two programs that expose data the sender can use to see what is happening are SNDS (Smart Network Data Services), which gives per-IP data on complaint rate, trap hits, and filtered rate, and JMRP (Junk Mail Reporting Program), which is the feedback loop where Outlook.com users who mark a message as junk report back to the sender.

SNDS exposes the data. It does not raise the reputation. The reputation comes from the actual sending pattern over time. The earliest action is to enroll in both programs so the data starts flowing, then read what is reported and clean up the sender's behavior from there.

A practical diagnostic for the user

Before chasing anything, pull the source of a message that landed in Junk. Confirm the Authentication-Results header shows spf=pass, dkim=pass, and dmarc=pass for the actual recipient, not a test mailbox. If authentication is genuinely passing, move to the SCL and BCL values in the same source. If SCL is below 5 but the message is in Junk, the receiving tenant has a transport rule or a third-party SEG upstream that is re-scoring the message before EOP sees it.

A clean SCL with authentication passing means the platform is doing its job and the sender's job is to build reputation. A high SCL means the content or the sending pattern needs work, and authentication will not help.

A hidden third-party sender with a misconfigured DKIM alignment is one of the most common reasons a sender is confused about their own pass result. The most reliable way to confirm the authentication side is genuinely clean across every sending source is to read the DMARC aggregate reports. DMARCFlow reads those aggregate reports and surfaces, in plain English, which of the sender's sending sources pass or fail SPF and DKIM alignment today. If there is a hidden failure, the sender sees it. If everything is clean, the sender can stop arguing about authentication and focus on the operational work.

What to do, in order

First, confirm the authentication really is passing on the actual messages being sent, not just on a test message sent from the admin's own mailbox. Run the aggregate reports through DMARCFlow and confirm every sending source is clean. Second, enroll the sending IP in SNDS and the sending domain in JMRP so reputation data starts flowing. Third, warm up the sending volume, starting at a few hundred well-formed messages per day and ramping over four to six weeks. Fourth, clean the content. Remove shorteners, balance the image ratio, soften the financial trigger words, fix any display-name mismatches. Fifth, ask the most frequent recipients to add the From address to their Safe Senders list. Do not ask for a whitelist transport rule. Those are tenant-level and fragile.

Sixth, once a week of clean SCL values shows reputation is stable, move DMARC to p=quarantine. Seventh, consider VMC plus BIMI as a long-term trust signal. BIMI requires DMARC at p=quarantine or p=reject, so it is a phase and not a starting move.

FAQ

Is my SPF, DKIM, or DMARC wrong if my emails land in Junk?
Not necessarily. Authentication checks identity, not content. A clean authentication result with a Junk placement usually means the content or reputation is the issue, not the records.

Does Microsoft read my DMARC aggregate reports to decide where my mail lands?
Microsoft's own filtering does not consume the sender's aggregate reports. The reports are for the sender's own visibility. Microsoft's decision is based on its own telemetry plus the published records.

How long does it take for a new sending domain to build reputation with Outlook?
Plan on 4 to 8 weeks of consistent clean sending before reputation starts to feel stable. The exact timeline depends on volume, content, complaint rate, and the receiving tenants involved.

Can I shorten the warmup period by sending from an existing IP?
Using a warm IP on a new domain still leaves the new domain at zero reputation. The improvement is partial. The bigger gain is consistent, well-formed mail over time.

Will BIMI help with Junk folder placement on its own?
BIMI is a trust signal for clients that support it, not a Junk-folder fix. It requires DMARC at p=quarantine or p=reject, and a stable reputation, before it does useful work.

Should I switch ESPs if my mail keeps landing in Junk?
Only after exhausting the operational ones. Most ESPs deliver similar content because most ESPs use similar scoring inputs. The faster win is usually warmup and content cleanup, not a vendor change.

Authentication and content filtering are two different decisions. The reader's authentication is correct. The next step is operational: SNDS, JMRP, warmup, content cleanup. BIMI and p=quarantine are the long-term play once reputation is established.