How do you run a message trace in Microsoft 365?
Open the Exchange admin center, go to Mail flow > Message trace (admin.exchange.microsoft.com/#/messagetrace) and select Start a trace. Enter the sender, recipient and time range, then open a result to see its delivery status and message events. You can search 90 days back, but only 10 days at a time for instant results.
On this page 7 sections
When someone says "I never got that email", message trace is the first place to look. It shows whether Microsoft 365 received the message, what its filters did with it and where it ended up. This guide covers where to find it at the time of writing (October 2026), how to read the results, and the PowerShell cmdlets that replaced the old ones.
Where is message trace in Microsoft 365?
Message trace lives in the Exchange admin center (EAC). Go to admin.exchange.microsoft.com, then Mail flow > Message trace, or open https://admin.exchange.microsoft.com/#/messagetrace directly (Microsoft Learn).
You can also start from the Microsoft Defender portal at security.microsoft.com: go to Email & collaboration > Exchange message trace. Microsoft calls that page "a really pass through" to the EAC page (Microsoft Learn), so you end up in the same tool.
You need the right role. For the EAC, Microsoft lists the Organization Management role group in Exchange Online, or the Exchange Administrator role in Microsoft Entra ID. Microsoft advises against using Global Administrator for routine work.
The new message trace began rolling out to general availability in June 2025, and Microsoft said the old trace page and old cmdlets would start deprecating on September 1, 2025 (Microsoft Tech Community). If you have old screenshots or scripts, expect differences.
How do you run a message trace?
- On the Message trace page, select Start a trace. The default searches all senders and recipients for the last two days.
- In Senders and Recipients, enter addresses. External addresses work, and a single wildcard such as
*@contoso.comis allowed. - Set the Time range. The slider covers up to 90 days, or switch to Custom time range to set a time zone and exact start and end times.
- Optionally open Detailed search options to filter by subject, delivery status, Message ID, direction or original client IP.
- Choose a Report type (see below) and select Search, or Next for downloadable reports.
- Select a row in the results to open its details.
The Autosaved queries tab keeps your last 10 searches. That's handy when you're going back and forth with a user.
Which report type should you pick?
| Report | Time range | Max results | How you get it |
|---|---|---|---|
| Summary | 10 days or less | 20,000 | On screen, almost immediately |
| Enhanced summary | Any, up to 90 days | 100,000 | CSV download, can take several hours |
| Extended | Any, up to 90 days | 1,000 | CSV download, can take several hours |
Microsoft says "you can only query 10 days' worth of data at a time" for the instant Summary report. A range even slightly over 10 days produces a downloadable report from archived data. Enhanced and Extended reports also need a sender, recipient or Message ID, and Microsoft notes that the last 24 hours of archived data "isn't typically available" in them. So for anything recent, use Summary.
How do you read message trace results?
The Summary report lists each message with Date, Sender, Recipient, Subject and Status. Dates use the time zone set in your Exchange account settings, so check it before you tell a user "it arrived at 9:14".
What do the delivery statuses mean?
Microsoft defines these statuses (Microsoft Learn):
| Status | What it means | What to do next |
|---|---|---|
| Delivered | Delivered to the intended destination | Check the user's Junk folder, inbox rules and other folders |
| Failed | The message wasn't delivered | Open the events to find the failure reason |
| Pending | Delivery is being attempted or retried | Wait, then check the Defer events |
| Quarantined | Quarantined as spam, bulk or phishing | Review it in quarantine |
| Filtered as spam | Identified as spam and rejected or blocked, not quarantined | Read the spam verdict before allowing anything |
| Expanded | A distribution group was expanded to its members | Trace the individual member |
| Recalled | The message was recalled | Ask the sender |
| Getting status | Received, but no other status yet | Check again in a few minutes |
Microsoft notes a possible "five to ten minute delay" between the actual and reported status. Pending, Quarantined and Filtered as spam can only be used as filters in searches of less than 10 days.
What are message events?
Open a row and expand Message events to see what happened step by step. The common events are Receive, Send, Deliver, Fail, Defer, Expand, Transfer, Resolved, DLP rule and Sensitivity label. Microsoft says even "an uneventful, successfully delivered message generates multiple Event entries."
Expand More information for the Message ID, the message size, From IP and To IP. From IP is the server that handed the message to Microsoft 365. If your MX points to a filtering gateway, From IP should be the gateway, not the original sender.
To follow one message across forwarding, group expansion or mail flow rules, select the round check box next to it and choose Find related. Microsoft explains that "even a single message sent between two people can generate multiple records."
What are the most common findings?
The message was delivered, but the user can't find it
Delivered with a Deliver event means it reached the mailbox. From there, Microsoft's own filters may still have sent it to Junk, or a user's inbox rule may have moved or deleted it. Check the Junk folder and the user's rules. Our guide to Microsoft 365 emails going to Junk explains how to read the verdict in the headers. If a rule moved mail the user never set up, treat it as a possible compromise and work through signs an email account is compromised.
The message was quarantined
The trace confirms it, but the quarantine is where you act. Before releasing it, check the sender, links and authentication. Our guide to releasing quarantined email in Microsoft 365 covers the steps and what users can release themselves.
The message was filtered as spam
Get the reason before you add an allow entry. An Extended report includes a custom_data field. Values starting with S:SFA come from the spam filter agent and contain the same fields as the X-Forefront-Antispam-Report header, such as SFV=SPM and SCL=9 (Microsoft Learn). Our Microsoft 365 spam headers explained guide decodes them.
Outbound mail failed
For mail your users sent, a Fail event usually comes with a bounce. Paste the error into the SMTP Error Code Lookup. If every message from one user fails with 550 5.1.8, Microsoft has restricted that account, which our guide to a Microsoft 365 user blocked from sending covers.
Nothing shows up at all
If a search with the right addresses and a wide enough time range returns nothing, Microsoft 365 probably never accepted the message. Check:
- The address. One wrong character is enough. Paste addresses rather than typing them.
- The time zone. Widen the range by a day either side.
- The sender's bounce. If the sender's server was refused, they got a bounce, and it names the reason.
- Your MX record. An MX Lookup shows where mail for your domain goes. If you use a filtering gateway, check its logs too. The message may be held there.
How do you run a message trace in PowerShell?
Use Get-MessageTraceV2 and Get-MessageTraceDetailV2. Microsoft's reference for Get-MessageTrace now says it "is replaced by the Get-MessageTraceV2 cmdlet and will eventually be deprecated" (Microsoft Learn). The V2 cmdlets need version 3.7.0 or later of the Exchange Online PowerShell module.
Connect-ExchangeOnline
Get-MessageTraceV2 -SenderAddress john@contoso.com `
-StartDate "10/01/2026" -EndDate "10/08/2026"
To see events for a single message, pipe the result into the detail cmdlet, as Microsoft's own example does:
Get-MessageTraceV2 -MessageTraceId 2bbad36aa4674c7ba82f4b307fff549f `
-SenderAddress john@contoso.com -StartDate "10/01/2026" -EndDate "10/03/2026" |
Get-MessageTraceDetailV2
Key limits from the Get-MessageTraceV2 reference:
- It searches "the last 90 days", but "you can only return 10 days worth of data per query."
- With no parameters, it returns the last 48 hours only.
- It returns 1,000 results by default and 5,000 at most (
-ResultSize). - Pagination isn't supported. To get the next batch, rerun the query with
-EndDateset to the last result's received time and-StartingRecipientAddressset to its recipient. - A tenant can make at most 100 queries in a rolling 5-minute window.
-StatusacceptsDelivered,Expanded,Failed,FilteredAsSpam,GettingStatus,PendingandQuarantined.
If you have old scripts that use -Page and -PageSize, rewrite them. -ResultSize replaces -PageSize.
Which IDs should you search with?
The most precise search is by ID, and there are two:
- Message ID comes from the
Message-IDheader. Microsoft says it stays constant for the lifetime of the message. Include the angle brackets when you search. - Network Message ID identifies one instance of a message inside Microsoft 365. You'll find it in headers such as
X-MS-Exchange-Organization-Network-Message-Id, and PowerShell accepts it as-MessageTraceId. Microsoft says the MessageTraceId is required for complete results when a message went to more than 1,000 recipients.
Ask the user to send you the headers of a related message, or paste them into the Email Header Analyzer, which runs in your browser. Our guide on how to read email headers shows where each ID lives.
Next steps
- Bookmark
admin.exchange.microsoft.com/#/messagetraceand confirm your Exchange time zone setting. - Update any scripts still using
Get-MessageTracetoGet-MessageTraceV2, and remove-Pageloops. - For quarantined or spam-filtered mail, read the verdict before you add allow entries.
- If you use a filtering gateway in front of Microsoft 365, its message history is the other half of the trace. iBlockSpam keeps 30 days of message history per domain, with quarantine and digests for each user.
- Google Workspace admins have an equivalent tool, covered in Google Workspace Email Log Search.
Browse more guides on running email day to day.
Frequently asked questions
How far back can a Microsoft 365 message trace go?
90 days. In the Exchange admin center, searches of 10 days or less return an instant Summary report. Anything longer than 10 days becomes a downloadable CSV report built from archived data, which can take several hours. Get-MessageTraceV2 also covers 90 days but returns at most 10 days of data per query.
Where is message trace in the Defender portal?
In the Microsoft Defender portal, go to Email & collaboration > Exchange message trace. Microsoft describes this link as a pass-through: it opens the Message trace page in the new Exchange admin center, so the tool, options and results are the same in both places.
Is Get-MessageTrace deprecated?
Microsoft's documentation says Get-MessageTrace is replaced by Get-MessageTraceV2 and will eventually be deprecated. Microsoft announced that the old cmdlets would start deprecating on September 1, 2025. Use Get-MessageTraceV2 and Get-MessageTraceDetailV2, which need version 3.7.0 or later of the Exchange Online PowerShell module.
Why doesn't a message show up in message trace?
Usually the search is too narrow: wrong time zone, a typo in the address, or a time range that ends before the message arrived. If the sender's server never connected to Microsoft 365, there's nothing to trace, so ask the sender for their bounce. Very recent messages can also show Getting status for a few minutes.
What does Filtered as spam mean in message trace?
Microsoft defines it as a message identified as spam that was rejected or blocked, not quarantined. Open the message's details to see the events and, in an Extended report, the spam filter agent data, which includes the SFV and SCL values that explain the verdict.
Sources
- Microsoft Learn: Message trace in the new EAC in Exchange Online
- Microsoft Learn: Message trace in the Microsoft Defender portal
- Microsoft Learn: Get-MessageTraceV2
- Microsoft Learn: Get-MessageTrace (replaced by Get-MessageTraceV2)
- Microsoft Tech Community: Announcing General Availability (GA) of the New Message Trace in Exchange Online
- Microsoft Learn: Anti-spam message headers in Microsoft 365
See how your domain measures up
Run a free Email Health Check: MX, SPF, DKIM, DMARC and transport security in one scan, with the raw records shown. No sign-up.
Keep reading
How do you use Email Log Search in Google Workspace?
Use Email Log Search in the Google Admin console to find missing messages, read delivery and spam statuses, and fix what you find. Limits and tips included.
9 min read Running email day to dayHow to read email headers
Read email headers step by step: the Received chain from the bottom up, Authentication-Results, ARC, Return-Path, Message-ID and Microsoft 365 anti-spam fields.
10 min read Running email day to dayWhy are legitimate emails going to Junk in Microsoft 365, and how do you fix it?
Why legitimate email lands in Junk in Outlook and Microsoft 365: user lists, bulk scores, spoof checks and sender authentication. Diagnose from headers and fix.
9 min read