Exchange Server:搜索邮件跟踪日志

邮件跟踪日志记录邮件流在流经邮箱服务器和边缘传输服务器上的传输管道时的邮件活动。 可以在 Exchange 命令行管理程序中使用 Get-MessageTrackingLog cmdlet,通过具体的搜索条件来搜索邮件跟踪日志条目。 例如:

  • 了解用户发送给特定收件人的邮件经历了什么。

  • 了解邮件流规则(也称为传输规则)是否对邮件执行操作。

  • 确定 Internet 发件人发送的邮件是否传递到 Exchange 组织。

  • 查找在指定时间段内由指定用户发送的所有邮件。

在开始之前,您需要知道什么?

  • 估计完成时间:10 分钟

  • 您必须先获得权限,然后才能执行此过程或多个过程。 若要查看所需的权限,请参阅 邮件流权限主题中的"邮件跟踪"条目。

  • 必须运行 Microsoft Exchange 传输日志搜索服务,才能搜索邮件跟踪日志。 如果禁用或停止此服务,则无法搜索邮件跟踪日志或生成送达报告。 不过,停止此服务不会影响 Exchange 中的其他功能。

  • Get-MessageTrackingLog cmdlet 结果中显示的字段名称类似于邮件跟踪日志中的实际字段名称。 最明显的几处区别在于:

    • 字段名称中没有短划线。 例如, internal-message-id 显示为 InternalMessageId

    • 日期-时间字段显示为 Timestamp

    • 收件人地址字段显示为 Recipients

    • 发件人地址字段显示为 Sender

  • 邮件跟踪日志中的 date-time 字段以协调世界时 (UTC) 格式存储信息。 但是,你需要以用于执行搜索的计算机的区域日期时间格式输入 开始结束 参数的日期时间搜索条件。

  • 无法复制其他 Exchange 服务器上的邮件跟踪日志,然后使用 Get-MessageTrackingLog cmdlet 进行搜索。 此外,如果手动保存现有邮件跟踪日志文件,那么此文件的日期时间时间戳的变化会破坏 Exchange 用来搜索邮件跟踪日志的查询逻辑。

  • 在 Exchange 2016 中, Get-MessageTrackingLog cmdlet 能够在同一 Active Directory 站点中的 Exchange 2013 邮箱服务器和 Exchange 2010 中心传输服务器上搜索邮件跟踪日志。 在 Exchange 2019 中, Get-MessageTrackingLog cmdlet 能够在同一 Active Directory 站点中的 Exchange 2016 和 Exchange 2013 邮箱服务器上搜索邮件跟踪日志。

  • 若要了解本主题中的过程可能适用的键盘快捷键,请参阅 Exchange 管理中心内的键盘快捷键

提示

是否有任何疑问? 请在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange ServerExchange OnlineExchange Online Protection

使用 Exchange 命令行管理程序搜索邮件跟踪日志

若要搜索具体事件的邮件跟踪日志条目,请使用下列语法:

Get-MessageTrackingLog [-Server <ServerIdentity>] [-ResultSize <Integer> | Unlimited] [-Start <DateTime>] [-End <DateTime>] [-EventId <EventId>] [-InternalMessageId <InternalMessageId>] [-MessageId <MessageId>] [-MessageSubject <Subject>] [-Recipients <RecipientAddress1,RecipientAddress2...>] [-Reference <Reference>] [-Sender <SenderAddress>]

若要查看服务器上的 1000 条最新邮件跟踪日志条目,请运行下列命令:

Get-MessageTrackingLog

本示例在本地服务器上的邮件跟踪日志中搜索从 3/28/2015 8:00 AM 到 3/28/2015 5:00 PM 的所有 条目 ,查找消息发送方所在的 pat@contoso.com所有 FAIL 事件。

Get-MessageTrackingLog -ResultSize Unlimited -Start "3/28/2015 8:00AM" -End "3/28/2015 5:00PM" -EventId "Fail" -Sender "pat@contoso.com"

使用下列语法:

Get-MessageTrackingLog <SearchFilters> | <Format-Table | Format-List> [<FieldNames>] [<OutputFileOptions>]

本示例使用下列搜索条件搜索邮件跟踪日志:

  • 返回前 1000 个 Send 事件的结果。

  • 结果通过列表格式显示。

  • 仅显示以 或 Recipient开头的Send那些字段名称。

  • 将输出写入名为 的新文件 D:\Send Search.txt

Get-MessageTrackingLog -EventId Send | Format-List Send*,Recipient* | Set-Content -Path "D:\Send Search.txt"

使用 Exchange 命令行管理程序搜索多个服务器上的邮件跟踪日志条目

一般来说, MessageID: 标头字段中的值在邮件通过整个 Exchange 组织的过程中保持不变。 此属性在队列视图实用工具中名为 InternetMessageId ,而在邮件跟踪日志视图实用工具中则名为 MessageId 。 在确定特定邮件的 MessageID: 值后,就可以在 Exchange 组织中每台邮箱服务器上的邮件跟踪日志中搜索相应邮件的信息。

若要搜索特定邮件在所有邮箱服务器和 Exchange 2010 集线器传输服务器上的全部邮件跟踪日志条目,请使用下列语法。

$Servers = Get-ExchangeServer;  $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -MessageId <MessageID>  | Select-Object <CommaSeparatedFieldNames>  | Sort-Object -Property <FieldName>

此示例使用下列搜索条件搜索所有邮箱服务器和 Exchange 2010 集线器传输服务器上的邮件跟踪日志:

  • 查找与具有 MessageID:<ba18339e-8151-4ff3-aeea-87ccf5fc9796@mailbox01.contoso.com>的消息相关的任何条目。 请注意,可以在) <> (省略尖括号字符。 如果不省略,需要用引号将整个 MessageID: 值括起来。

  • 对于每个条目,系统都显示字段 date-timeserver-hostnameclient-hostnamesourceevent-idrecipient-address

  • date-time 字段对结果进行排序。

$Servers = Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -MessageId ba18339e-8151-4ff3-aeea-87ccf5fc9796@mailbox01.contoso.com | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Recipients | Sort-Object -Property Timestamp

使用 EAC 搜索邮件跟踪日志

可以使用 Exchange 管理中心 (EAC) 中的送达报告(管理员功能)搜索邮件跟踪日志中有关组织中特定邮箱发送或接收的邮件的信息。 有关详细信息,请参阅使用送达报告跟踪邮件