Applies to: Exchange Server 2016

Topic Last Modified: 2017-11-10

This cmdlet is available only in on-premises Exchange Server 2016.

Use the Get-MessageTrackingReport cmdlet to return data for a specific message tracking report. This cmdlet is used by the delivery reports feature.

In Exchange Online, delivery reports has been replaced by message trace (the Get-MessageTrace and Get-MessageTraceDetail cmdlets).

For information about the parameter sets in the Syntax section below, see Exchange cmdlet syntax.

Get-MessageTrackingReport -Identity <MessageTrackingReportId> [-BypassDelegateChecking <SwitchParameter>] [-DetailLevel <Basic | Verbose>] [-DomainController <Fqdn>] [-DoNotResolve <SwitchParameter>] [-RecipientPathFilter <SmtpAddress>] [-Recipients <String[]>] [-ReportTemplate <Summary | RecipientPath>] [-ResultSize <Unlimited>] [-Status <Unsuccessful | Pending | Delivered | Transferred | Read>] [-TraceLevel <Low | Medium | High>]

This example gets the message tracking report for messages sent from one user to another. This example returns the summary of the message tracking report for a message that David Jones sent to Wendy Richardson.

$Temp = Search-MessageTrackingReport -Identity "David Jones" -Recipients ""
Get-MessageTrackingReport -Identity $Temp.MessageTrackingReportID -ReportTemplate Summary

This example gets the message tracking report for the following scenario: The user Cigdem Akin was expecting an email message from that never arrived. She contacted the Help desk, which needs to generate the message tracking report on behalf of Cigdem and doesn't need to see the display names.

This example searches the message tracking data for the specific message tracking reports, and then returns detailed troubleshooting information for the specific recipient path.

Search-MessageTrackingReport -Identity "Cigdem Akin" -Sender "" -ByPassDelegateChecking -DoNotResolve | ForEach-Object { Get-MessageTrackingReport -Identity $_.MessageTrackingReportID -DetailLevel Verbose -BypassDelegateChecking -DoNotResolve -RecipientPathFilter "" -ReportTemplate RecipientPath }

This cmdlet requires the ID for the message tracking report that you want to view. Therefore, first you need to use the Search-MessageTrackingReport cmdlet to find the message tracking report ID for a specific message, and then pass the results to this cmdlet. For more information, see Search-MessageTrackingReport.

You need to be assigned permissions before you can run this cmdlet. Although all parameters for this cmdlet are listed in this topic, you may not have access to some parameters if they're not included in the permissions assigned to you. To see what permissions you need, see the "Message tracking" entry in the Mail flow permissions topic.


Parameter Required Type Description




The Identity parameter specifies the message tracking report ID that you want to view.

You need to run the Search-MessageTrackingReport cmdlet to find the message tracking report ID for the specific message that you're tracking, and then pass the value of the MessageTrackingReportID field to this parameter.




The BypassDelegateChecking switch allows Help desk staff and administrators to retrieve message tracking reports for any user. You don't need to specify a value with this switch.

By default, each user can only see the message tracking reports for messages that they send or receive from their own mailbox. When you use this switch, you can view the message tracking reports for message exchanges among other users.




The DetailLevel parameter specifies the amount of detail to return in the results. Valid values are:

  • Basic   Simple delivery report information is returned, which is more appropriate for users.

  • Verbose   Full report information is returned, including server names and physical topology information.




The DomainController parameter specifies the domain controller that's used by this cmdlet to read data from or write data to Active Directory. You identify the domain controller by its fully qualified domain name (FQDN). For example,




The DoNotResolve switch specifies whether to prevent the resolution of email addresses to display names. You don't need to specify a value with this switch.

Using this switch improves performance, but the lack of display names might make the results more difficult to interpret.




The RecipientPathFilter parameter specifies the email address of the recipient when you use the ReportTemplate parameter with the value RecipientPath.




The Recipients parameter specifies the email addresses of the recipients when you use the ReportTemplate parameter with the value Summary. You can specify multiple email addresses separated by commas.




The ReportTemplate parameter specifies a predefined format for the output. Valid values are:

  • RecipientPath   Returns a detailed tracking report for one recipient of the message. You specify the recipient by using the RecipientPathFilter parameter.

  • Summary   Returns a summary for all recipients of the message. You specify the recipients by using the Recipients parameter.




The ResultSize parameter specifies the maximum number of results to return. If you want to return all requests that match the query, use unlimited for the value of this parameter. The default value is 1000.




The Status parameter filters the results by the specified delivery status codes. Valid values are:

  • Delivered

  • Read

  • Pending

  • Transferred

  • Unsuccessful




The TraceLevel parameter specifies the details to include in the results. Valid values are:

  • Low   Minimal additional data is returned, including servers that were accessed, timing, message tracking search result counts, and any error information.

  • Medium   In addition to the data returned for the Low setting, the actual message tracking search results are also returned.

  • High   Full diagnostic data is returned.

You only need to use this parameter for troubleshooting message tracking issues.

To see the input types that this cmdlet accepts, see Cmdlet Input and Output Types. If the Input Type field for a cmdlet is blank, the cmdlet doesn’t accept input data.

To see the return types, which are also known as output types, that this cmdlet accepts, see Cmdlet Input and Output Types. If the Output Type field is blank, the cmdlet doesn’t return data.