Skip to content

How to Trace an Email Message in Exchange Online

Use message trace in the Exchange admin center to find where an email went: read Delivered, Pending, Failed, and Quarantined statuses, and run a detailed trace for older mail.

MGMCSA Guru Team July 9, 2026 7 min read
Diagram-style cover showing an email message traced through Exchange Online with delivery statuses along the path

When someone says “I never got that email” or “did my message actually send?”, message trace is how you get a real answer instead of a guess. It’s the mail-flow log built into Exchange Online, and it tells you exactly what happened to a message after it reached Microsoft: whether it was delivered, is still pending, bounced, or got pulled into quarantine.

Most traces take under a minute. The skill is reading the result correctly — knowing what each status really means, when to switch to a detailed trace, and how to handle mail older than the standard window. This guide covers all of that, plus the everyday cases where a trace settles an argument fast.

Before you start

You need the right access and a few details about the message, or you’ll waste time scrolling through unrelated results.

Before you run a trace

  • You have an admin role with message tracking (Exchange Administrator is enough)
  • You know the sender or recipient address (even one side helps)
  • You have a rough date and time the message was sent
  • You know whether the mail is newer or older than ~10 days
  • You've confirmed the message involved Exchange Online (not a purely external hop)

Where message trace lives

  1. Sign in to the Exchange admin center (admin.exchange.microsoft.com).
  2. In the left menu, go to Mail flow → Message trace.
  3. Click Start a trace.

You’ll set the sender, recipient, date range, and delivery status, then run it. Keep the filters as narrow as you reasonably can — a wide-open trace across all senders for a busy tenant returns a wall of rows that’s hard to read.

Reading the delivery statuses

The status column is where people misread results. Here’s what each one actually tells you.

Message trace statuses, plain English

Delivered Exchange Online handed the message to the destination mailbox or onward server. It arrived — though an inbox rule could still have filed or deleted it after.
Pending Accepted but not yet delivered. Usually the receiving side is deferring or retrying. Often clears on its own.
Failed Delivery was rejected. The sender typically got a non-delivery report (NDR) with an error code explaining why.
Quarantined Held by spam or malware filtering. Not bounced — it's waiting in quarantine for release or review.
Filtered as spam Delivered, but routed to Junk by spam filtering rather than blocked outright.
Expanded The message went to a distribution group and was split out to the individual members.

The two that cause the most confusion are Delivered and Quarantined. Delivered does not mean “read” and does not mean “in the Inbox” — a message moved to Junk or eaten by a client-side rule still shows Delivered. Quarantined is not a bounce; the mail still exists and can be released. Treating a Quarantined result as “lost” sends people down the wrong path.

Running a detailed trace for older mail

For anything older than about 10 days, you run an extended trace and read the result as a report rather than a live grid.

  1. In Message trace, set the date range to include the older dates (this flips it to the extended type automatically).
  2. Fill in whatever sender/recipient detail you have to keep the report focused.
  3. Choose to include the enhanced detail / extended report options when prompted.
  4. Submit the trace. It’s queued, not instant.
  5. Come back to Message trace later — the finished report appears in the list of downloadable results, often as a CSV you can open in Excel.

Reading the detailed event log

For a recent message, click into a single result to open its detail view. Below the summary is a chronological event log — the play-by-play of what Exchange Online did with the message. This is where you find the actual reason behind a status.

Events you’ll commonly see:

  • Receive — the message arrived at Exchange Online.
  • Submit — it was handed to the transport pipeline.
  • Deliver — it reached the destination mailbox.
  • Defer — delivery was paused and will be retried (this is what sits behind a Pending status).
  • Fail — delivery was rejected, with a reason and often a remote server response.
  • Resolved / Expanded — the recipient resolved to a mailbox or expanded from a group.
  • Spam / Quarantine — filtering acted on the message.

The most useful detail in a Failed or Pending event is the remote server response — the raw SMTP error the other side returned, like 550 5.4.1 Recipient address rejected or a throttling notice. That text usually tells you whether the problem is on your side, theirs, or a bad address. When the log points at recurring delivery failures or mail not leaving the tenant at all, the broader checklist in Microsoft 365 email not sending or receiving walks through the DNS and mail-flow causes behind those errors.

Common uses for a trace

A few scenarios cover most of why you’d open message trace in the first place:

When to reach for a trace

"I never got the invoice" Trace by sender + recipient. A Delivered status points at the recipient's rules or Junk; nothing found means it never arrived.
"My replies are bouncing" Trace outbound by recipient. The Failed event's remote response gives the exact rejection reason.
"Did the newsletter reach everyone?" Trace by sender across recipients to see who got Delivered vs Filtered vs Failed.
"Is mail being delayed?" Look for Pending/Defer events and read the retry reason in the event log.
Spoofing / phishing review Trace a suspicious sender to see whether messages were Quarantined or Delivered, then tighten policy.

Quick checklist for a clean trace

When a trace comes back empty or confusing, run through this before concluding anything:

  1. Double-check the address spelling — a trace on the wrong alias returns nothing.
  2. Widen the date/time range slightly; senders are often off about when they sent it.
  3. Confirm you’re on the right side — trace by recipient for inbound problems, sender for outbound ones.
  4. If the mail is older than ~10 days, switch to an extended trace.
  5. Empty result + correct details usually means the message never reached Exchange Online — the problem is upstream of your tenant.

Wrapping up

Message trace turns “I think it sent” into a documented timeline. Run a real-time trace for anything in the last 10 days, switch to an extended report for older mail, and read the status carefully: Delivered means it left Exchange Online (not that it was read), Pending usually clears itself, Failed comes with an error you can act on, and Quarantined mail is held, not lost. When a status alone doesn’t explain things, the event log and its remote server responses almost always do.

If your traces keep surfacing delivery failures or missing inbound mail, pair this with the mail-flow fixes in Microsoft 365 email not sending or receiving, and if the trouble is around a team address, confirm the setup in our shared mailbox guide.

Frequently asked questions

How far back can a message trace go?

The standard real-time trace covers roughly the last 10 days and returns results immediately. For mail older than that, up to 90 days, you run an extended (historical) trace, which is queued and delivered as a downloadable report rather than shown on screen.

What does a 'Pending' status actually mean?

Pending means Exchange Online accepted the message but hasn't completed delivery yet. It's often waiting because the receiving server is deferring it (greylisting, throttling, or a temporary problem on their end). Pending usually clears on its own, but if it sits for hours the detailed trace will show the retry reason.

Why can't I find a message that the sender swears they sent?

If a trace returns nothing, the message likely never reached Exchange Online. Check that the sender used the correct address, that the date range is right, and that it wasn't blocked before your tenant. External senders sometimes get rejected at the edge, which won't always appear in your tenant's trace.

Does a 'Delivered' status mean the user definitely saw it?

Delivered means Exchange Online handed the message to the destination mailbox or forwarded it onward. It doesn't prove the user read it, and it doesn't account for inbox rules that moved it to another folder or deleted it after delivery. A delivered message in the Junk folder still shows as Delivered.

Can a regular user run a message trace?

No. Message trace lives in the Exchange admin center and requires an admin role such as Exchange Administrator, with the message tracking permissions. Help desk staff can be given a custom role that includes message tracking without full admin rights.

What's the difference between Failed and Quarantined?

Failed means delivery was rejected outright, usually with a non-delivery report (NDR) and an error code. Quarantined means the message was held by spam or malware filtering and is sitting in quarantine for review, not bounced. You release quarantined mail from the Defender portal; failed mail has to be resent after fixing the cause.

Sources & further reading

Official vendor documentation referenced while writing this guide.

MG

MCSA Guru Team

IT & Systems Administration

We are working IT pros and system administrators who spend our days in Windows Server, Microsoft 365, and the wider Microsoft stack. MCSA Guru is where we write down the fixes and walkthroughs we wish we had found the first time.

MCSA Guru provides independent, educational IT guidance. Microsoft, Windows, Windows Server, Microsoft 365, Exchange, and Microsoft Teams are trademarks of Microsoft Corporation; Docker is a trademark of Docker, Inc. MCSA Guru is not affiliated with or endorsed by Microsoft or Docker. Always test changes in a safe environment before applying them in production.

Related guides

Fixing something right now?

Jump straight into the guide library or search for the exact error or task you are dealing with.