如何搜索邮件跟踪日志

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2011-10-04

本主题将介绍如何使用 Exchange 管理控制台或 Exchange 命令行管理程序搜索邮件跟踪日志。

邮件跟踪日志是一个详细日志,其中记录了安装了集线器传输服务器角色、邮箱服务器角色或边缘传输服务器角色的 Microsoft Exchange Server 2007 计算机接收和发送的所有邮件的传输活动。安装了客户端访问服务器角色或统一消息服务器角色的 Exchange 服务器没有邮件跟踪日志。可使用邮件跟踪日志进行邮件诊断、邮件流分析、报告和故障排除。

在 Exchange 2007 正式发布 (RTM) 版本和 Exchange 2007 Service Pack 1 (SP1) 中,可以使用 Exchange 命令行管理程序中的 Get-MessageTrackingLog cmdlet 以及 Exchange 管理控制台中的邮件跟踪工具,根据特定的搜索条件来搜索邮件跟踪日志中的条目。

在 Exchange 2007 SP1中,可以使用新的名为 GetMessageTrackingLogE2EwithTime.ps1 的 Exchange 命令行管理程序脚本来搜索 Exchange 组织中所有集线器传输服务器和邮箱服务器上的所有邮件跟踪日志中的指定条目。在想要跟踪穿梭于 Exchange 组织中的邮件的整个端到端路径时,这会很有用。

开始之前

若要在 Exchange 2007 RTM 中执行以下步骤,必须为您使用的帐户委派下列角色:

  • Exchange Server 管理员角色和目标服务器的本地 Administrators 组

若要在 Exchange 2007 SP1 中执行以下步骤,必须为您使用的帐户委派下列角色:

  • Exchange 仅查看管理员角色

若要在安装了边缘传输服务器角色的 Exchange 2007 RTM 或 Exchange 2007 SP1 计算机上执行以下步骤,必须使用作为该计算机上的本地 Administrators 组成员帐户进行登录。

有关管理 Exchange 2007 所需的权限、角色委派以及权利的详细信息,请参阅权限注意事项

当您在集线器传输服务器或邮箱服务器上使用 Get-MessageTrackingLog cmdlet 或邮件跟踪工具执行邮件跟踪日志搜索时,您无法访问边缘传输服务器上的邮件跟踪日志。如果要搜索边缘传输服务器上的邮件跟踪日志,必须直接从边缘传输服务器上运行 Get-MessageTrackingLog cmdlet 或邮件跟踪工具。

邮件跟踪日志的搜索取决于 Microsoft Exchange 传输日志搜索服务。如果禁用或停止此服务,则会在 Exchange 2007 服务器上产生不可见的问题,但不会丧失日志搜索功能。

您不能从 Exchange 服务器复制邮件跟踪日志,再使用 Get-MessageTrackingLog cmdlet 或邮件跟踪工具在其他 Exchange 服务器上搜索复制的日志。而且,如果您保存现有的邮件跟踪日志,一旦邮件跟踪日志文件的日期-时间戳发生更改,便会破坏用于搜索邮件跟踪日志的查询逻辑。

邮件跟踪日志搜索条件

尽管每个邮件跟踪日志条目都可以使用 20 个以上的数据字段,但并不是每个字段都可用作搜索筛选器。Exchange 命令行管理程序提供的搜索筛选器在 Exchange 管理控制台中也可用,因为 Exchange 管理控制台使用 Get-MessageTrackingLog cmdlet 搜索邮件跟踪日志。不过,Exchange 命令行管理程序为您提供了对搜索结果的更多控制。

Exchange 管理控制台和 Exchange 命令行管理程序常用的搜索筛选器

无论是在 Exchange 命令行管理程序中还是在邮件跟踪工具中使用 Get-MessageTrackingLog cmdlet,都可以使用以下列表中描述的搜索筛选器,并且这些筛选器以相同的方式运行:

note注意:
不支持使用包含部分值或多个值的搜索筛选器,除非另行说明。
  • Recipients   此搜索筛选器使用 recipient-address 字段。必须输入收件人的完整电子邮件地址。通过使用逗号作为分隔符,可以指定多个收件人值。单个邮件中包括的多个单独收件人可通过使用单个邮件跟踪日志条目记录。未展开的通讯组收件人则通过使用通讯组的 SMTP 电子邮件地址记录。

  • Sender   此搜索筛选器使用 sender 字段。必须输入发件人的完整电子邮件地址。sender 字段包含 Sender: 头字段中指定的发件人电子邮件地址;如果 Sender: 不存在,则包含 From: 头字段中指定的发件人电子邮件地址。

  • Server   此搜索筛选器指定包含要搜索的邮件跟踪日志的 Exchange 2007 服务器。可以使用下列任意值描述该服务器:

    • 名称

    • 完全限定的域名 (FQDN)

    • 可分辨名称 (DN)

    • 旧版 Exchange DN

    • GUID

  • EventID   此搜索筛选器使用 event-id 字段。在邮件跟踪工具中,从下拉列表中选择 EventID 的值。在 Get-MessageTrackingLog cmdlet 中,以文本形式输入 EventID 的值。但是,该值必须与可能的 EventID 值之一完全匹配。EventID 是分配给每个邮件跟踪日志条目的事件分类。可用值包括 BADMAIL、DEFER、DELIVER、DSN、EXPAND、FAIL、POISONMESSAGE、RECEIVE、REDIRECT、RESOLVE、SEND、SUBMIT 和 TRANSFER。

  • MessageID   此搜索筛选器使用 message-id 字段。MessageID 是 Message-ID: 头字段的值。如果 Message-ID: 头字段不存在或为空,则分配一个任意值。此值在邮件生存期内保持不变。

  • InternalMessageID   此搜索筛选器使用 internal-message-id 字段。InternalMessageID 是一个由当前正在处理邮件的 Exchange 2007 服务器分配的邮件标识符整数。

  • Subject   此参数在 Get-MessageTrackingLog cmdlet 中,参数名为 MessageSubject。此搜索筛选器使用 message-subject 字段。支持部分值。它是 Subject: 头字段中指定的邮件主题。在集线器传输服务器和边缘传输服务器上,对邮件主题的跟踪由 Set-TransportServer cmdlet 中的 MessageTrackingLogSubjectLoggingEnabled 参数控制;在邮箱服务器上,则由 Set-MailboxServer cmdlet 控制。默认情况下,会启用邮件主题日志记录。通过将 MessageTrackingLogSubjectLoggingEnabled 参数值设置为 $False,可以禁用邮件主题日志记录。

  • Reference   此搜索筛选器使用 reference 字段。此字段包含特定事件类型的其他信息。对于 DSN 事件,reference 字段包含引发 DSN 的邮件的 MessageID:。对于 SEND 事件,reference 字段包含任何 DSN 邮件的 MessageID:。对于 TRANSFER 事件,reference 字段包含被分叉的邮件的 MessageID:

  • Start   此搜索筛选器使用 date-time 字段来查找在指定的结束日期-时间启动的邮件跟踪条目。可以使用此筛选器本身在指定的日期-时间后检索所有邮件跟踪日志条目,也可以将其用作 End 参数的下限。

  • End   此搜索筛选器使用 date-time 字段来查找在指定的结束日期/时间(不包括此日期-时间)之前发生的邮件跟踪条目。可以使用此筛选器本身来检索在指定的日期-时间之前发生的所有邮件跟踪日志条目,也可以将其用作 Start 参数的上限。

note注意:
邮件跟踪日志中的 date-time 字段以协调世界时 (UTC) 格式存储信息。但是,您应该使用用于执行搜索的计算机上的区域日期-时间格式输入日期-时间搜索条件。邮件跟踪日志搜索工具会自动将区域日期-时间查询转换为 UTC 格式。搜索结果将自动从 UTC 格式转换回区域日期-时间格式,以进行显示。date-time 字段记录特定邮件跟踪事件的日期-时间。邮件起始日期-时间是指邮件首次传入 Exchange 组织时的日期-时间。邮件起始日期-时间存储在所有 SEND 和 DELIVER 事件的 message-info 字段中。

Exchange 管理控制台和 Exchange 命令行管理程序中不同的搜索筛选器

在 Exchange 命令行管理程序中,Get-MessageTrackingLog cmdlet 使用 ResultSize 参数对要显示的搜索结果数提供了更多控制。默认情况下,一次搜索最多显示 1,000 个结果。但是,您可以将最大值更改为特定的数目。或者,也可以使用值 Unlimited 显示所有结果。Exchange 管理控制台的邮件跟踪工具无法自定义要显示的最大搜索结果数。

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

下表列出了在 Exchange 命令行管理程序中使用 Get-MessageTrackingLog cmdlet 可获得的搜索筛选器。

使用 Get-MessageTrackingLog cmdlet 可获得的搜索筛选器

搜索筛选器 邮件跟踪日志中的相应字段

End

date-time

EventId

event-id

InternalMessageId

internal-message-id

MessageId

message-id

MessageSubject

message-subject

Recipients

recipient-address

Reference

reference

ResultSize

无。此参数用于限制搜索显示的结果数。

Sender

sender-address

Start

date-time

Get-MessageTrackingLog cmdlet 可使用的所有参数都是可选的。如果输入 Get-MessageTrackingLog cmdlet,而不带任何参数,则会显示最后 1,000 个邮件跟踪日志条目。

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

  • 运行以下命令:

    Get-MessageTrackingLog <SearchFilters>
    

    例如,要针对 pat@contoso.com 发送的所有 FAIL 事件,搜索从 7/28/2006 8:00 AM 到 7/28/2006 5:00 PM 的所有条目的邮件跟踪日志,请运行以下命令:

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

控制在 Exchange 命令行管理程序中执行的邮件跟踪日志搜索的输出

使用 Get-MessageTrackingLog cmdlet 执行邮件跟踪日志搜索时,并不会为每个邮件跟踪事件显示所有字段。下表列出了 Get-MessageTrackingLog cmdlet 默认显示的字段。

Get-MessageTrackingLog cmdlet 默认显示的字段

搜索字段 邮件跟踪日志中的相应字段

EventId

event-id

Source

message-source

Sender

sender-address

Recipients

recipient-address

MessageSubject

message-subject

可以在 Exchange 命令行管理程序中使用命令输出选项来控制 Get-MessageTrackingLog cmdlet 的输出,如以下列表中所述:

  • 您可以控制邮件跟踪日志搜索的输出格式。可以在列表或表中显示结果。

    important要点:
    尽管表格式看上去是个不错的输出格式选择,但它不一定是最佳选择。如果表中显示的字段包含较长的值,会截断这些值以适合表列。如果试图同时显示过多的字段,也会发生截断的情况。如果使用列表格式,则始终会显示完整的字段值。若要查看更多列,可以增加 Exchange 命令行管理程序窗口的宽度,其默认值为 80 个字符。可以通过 Exchange 命令行管理程序窗口的属性调整 Exchange 命令行管理程序窗口的尺寸。
  • 可以显示或隐藏邮件跟踪日志搜索返回的特定字段。支持使用通配符 (*)。

  • 可以将搜索结果发送到某个文件。

Get-MessageTrackingLog cmdlet 产生的结果所显示的字段名与用于筛选搜索结果的字段名相同。这些字段名与邮件跟踪日志中存储的实际字段名略有不同。下表并排显示了邮件跟踪日志中使用的字段名和 Get-MessageTrackingLog cmdlet 使用的字段名。

邮件跟踪日志中使用的字段名与 Get-MessageTrackingLog cmdlet 使用的字段名的比较

邮件跟踪日志中使用的字段名 用于筛选 Get-MessageTrackingLog 结果的字段名

date-time

Timestamp

client-ip

ClientIp

客户端主机名

ClientHostname

server-ip

ServerIp

server-hostname

ServerHostname

source-context

SourceContext

connector-id

ConnectorId

来源

来源

event-id

EventId

internal-message-id

InternalMessageId

message-id

MessageId

recipient-address

Recipients

recipient-status

RecipientStatus

total-bytes

TotalBytes

recipient-count

RecipientCount

related-recipient-address

RelatedRecipientAddress

reference

Reference

message-subject

MessageSubject

sender-address

Sender

return-path

ReturnPath

message-info

MessageInfo

使用 Exchange 命令行管理程序控制邮件跟踪日志搜索的输出

  • 使用以下命令:

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

    例如,要搜索前 1,000 个 Send 事件的邮件跟踪日志、以列表格式显示出现的结果、显示以“Send”或“Receive”开头的任何字段名的值,并将结果写入到名为“C:\send search.txt”的新文件,请运行以下命令:

    Get-MessageTrackingLog -EventId "Send" | Format-List Send*,Receive* > "C:\send search.txt"
    

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

在邮件遍历 Exchange 组织的整个过程中,保持不变的邮件属性是 MessageID: 头字段的值。此值在队列查看实用程序中名为 InternetMessageId,而在邮件跟踪日志实用程序中名为 MessageId。在确定了 MessageID: 的值后,可以在 Exchange 组织内每个集线器传输服务器或邮箱服务器上的邮件跟踪日志中搜索该邮件。

使用 Exchange 命令行管理程序,在所有集线器传输服务器和邮箱服务器上搜索邮件跟踪日志条目以查找特定邮件

  • 使用以下命令:

    Get-ExchangeServer | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -MessageId "<messageid>" | Select-Object <commaseparatedfieldnames> | Sort-Object -Property <field>
    

    例如,若要在所有集线器传输服务器和邮箱服务器上搜索邮件跟踪日志,以查找与 MessageID:ba18339e-8151-4ff3-aeea-87ccf5fc9796@contoso.com 的邮件相关的所有条目;若要显示字段 date-timeserver-hostnameclient-hostnamesourceevent-idrecipient-address for each entry,并按 date-time 字段对结果排序,请运行以下命令:

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

有关语法和参数的详细信息,请参阅Get-MessageTrackingLog

有关 Exchange 命令行管理程序中的命令输出选项的详细信息,请参阅使用命令输出

在 Exchange 2007 SP1 中使用 Exchange 命令行管理程序脚本搜索多个服务器上邮件的邮件跟踪日志

如本主题前面所述,Exchange 2007 SP1 包含一个名为 GetMessageTrackingLogE2EwithTime.ps1 的 Exchange 命令行管理程序脚本。该脚本使用 Get-MessageTrackingLog cmdlet 以特定的邮件标准搜索 Exchange 组织中所有集线器传输服务器和邮箱服务器上的邮件跟踪日志。还可以使用该脚本搜索特定列出的集线器传输服务器和邮箱服务器上的邮件跟踪日志。

该脚本使用下表中描述的参数:

GetMessageTrackingLogE2EwithTime.ps1 脚本使用的参数

参数 必需还是可选 说明

MessageId

如果未指定 MessageSubject 参数的值,则此参数是必需的。

该参数搜索邮件中具有指定 Message-ID: 头字段的邮件跟踪日志条目。

MessageSubject

如果未指定 MessageId 参数的值,则此参数是必需的。

该参数搜索邮件的 Subject: 头字段中包含指定文本字符串的邮件跟踪日志条目。如果为 MessageSubject 参数指定了一个空字符串值,搜索结果将查询邮件跟踪日志中的所有条目。

End

可选

通过使用运行此 cmdlet 的计算机的区域格式,此参数将搜索截至(但不包括)指定 End 日期和时间的邮件跟踪日志条目。所指定的日期将自动转换为 Exchange 2007 内部使用的 (UTC) 格式,以便在邮件跟踪日志中存储条目。

Sender

可选

此参数搜索具有指定发件人的 SMTP 电子邮件地址的邮件跟踪日志条目。如果为 Sender 参数指定了值,且邮件发件人是能被解析的内部发件人,邮件跟踪日志搜索将从发送人家庭邮箱服务器开始。

服务器

可选

该参数指定集线器传输服务器或邮箱服务器的逗号分隔的名称列表。该参数限制为对指定服务器上的邮件跟踪日志进行搜索。

Start

可选

通过使用运行此 cmdlet 的计算机的区域格式,此参数搜索从指定 Start 日期和时间开始的邮件跟踪日志条目。所指定的日期将自动转换为 Exchange 2007 内部使用的 (UTC) 格式,以便在邮件跟踪日志中存储条目。

您必须识别通过使用 MessageIdMessageSubject 参数搜索到的特定邮件。如果没有未 Sender 参数或 Server 参数指定值,则邮件跟踪日志会从运行 GetMessageTrackingLogE2EwithTime.ps1 脚本的集线器传输服务器或邮箱服务器开始搜索。

下表列出了在 GetMessageTrackingLogE2EwithTime.ps1 脚本结果中显示的字段。

GetMessageTrackingLogE2EwithTime.ps1 脚本结果中显示的字段。

显示字段 邮件跟踪日志中的相应字段

TimeStamp

date-time

EventId

event-id

Source

message-source

Sender

sender-address

RecipientCount

recipient-count

InternalMessageID

internal-message-id

Reference

参考

SourceContext

source-context

脚本结果显示为以字段作为列的表格式。每个字段的完整值显示在各个列。如果字段太宽,会截断显示剩余的列。如本主题前面部分所述,若要查看更多列,可以增加 Exchange 命令行管理程序窗口的宽度,其默认值为 80 个字符。可以通过 Exchange 命令行管理程序窗口的属性调整 Exchange 命令行管理程序窗口的尺寸。

使用 Exchange 命令行管理程序,通过使用 GetMessageTrackingLogE2EwithTime.ps1 脚本在所有集线器传输服务器和邮箱服务器上搜索邮件跟踪日志条目以查找特定邮件

  • 使用以下命令:

    GetMessageTrackingLogE2EwithTime.ps1 <-MessageId "message id" | -MessageSubject "message subject"> -<Other Optional Parameters>
    

    例如,若要在所有集线器传输服务器和邮箱服务器上搜索邮件跟踪日志,以查找任何包含文本字符串“financial report”且发件人为 "chris@contoso.com" 的条目,请运行以下命令:

    GetMessageTrackingLogE2EwithTime.ps1 -MessageSubject "financial report" -Sender "chris@contoso.com"
    

有关 Exchange 命令行管理程序脚本的详细信息,请参阅使用 Exchange 命令行管理程序编写脚本

使用 Exchange 管理控制台搜索邮件跟踪日志

使用 Exchange 管理控制台搜索邮件跟踪日志

  1. 打开 Exchange 管理控制台。

  2. 在控制台树中,单击“工具箱”。在结果窗格中,单击“邮件跟踪”。在操作窗格中,单击“打开工具”。

  3. 在“邮件跟踪参数”对话框中,通过选中搜索条件名旁边的复选框并为该搜索条件输入一个值,来设置邮件跟踪日志搜索的搜索条件。若要删除搜索条件,请清除搜索条件名旁边的复选框。默认情况下,选中下列搜索条件并提供了相应的值:

    • EventID,其值为 RECEIVE

    • “开始”,其值为打开邮件跟踪工具时的日期/时间

    • “结束”,其值为打开邮件跟踪工具时的日期/时间

    如果选中了“收件人”复选框,并在“收件人”字段中输入一个部分值,则可以通过单击“解析收件人”来填充收件人电子邮件地址的剩余部分。只可以在集线器传输服务器或邮箱服务器上使用此功能来解析 Exchange 2007 组织中存在的邮箱用户的姓名或已启用邮件的联系人的姓名。

    如果选中了“发件人”复选框,并在“发件人”字段中输入一个部分值,则可以通过单击“解析发件人”来填充发件人电子邮件地址的剩余部分。只可以在集线器传输服务器或邮箱服务器上使用此功能来解析 Exchange 2007 组织中存在的邮箱用户的姓名或已启用邮件的联系人的姓名。

    也可以通过单击“发件人的服务器”,使用发件人邮箱所在的邮箱服务器的名称来填充“服务器”字段。如果要将该服务器名用作搜索条件,请务必选中“服务器”复选框。

    note注意:
    输入搜索条件时,会在“Exchange 命令行管理程序命令”字段中填充具有同等作用的 Get-MessageTrackingLog 命令。
  4. 若要执行搜索,请单击“下一步”。

如果所做搜索在“邮件跟踪结果”对话框中没有生成任何结果,请单击“返回”并在“邮件跟踪参数”对话框中更改搜索条件。如果您的搜索条件中存在任何语法错误,则会显示一条错误消息。

如果所做搜索生成了结果,这些结果将在“邮件跟踪结果”对话框中以表格布局显示。针对每个邮件跟踪日志条目显示的每个字段占一行。若要按字段对结果排序,请单击任意列的列标题。

若要开始新的搜索,请在结果表中选择单个单元格或一整行,然后单击“下一步”。此操作会使您返回到“邮件跟踪参数”对话框。

note注意:
当您返回到“邮件跟踪参数”对话框后,“邮件跟踪参数”对话框中的邮件跟踪日志搜索条件已由先前选定的邮件跟踪条目的值填充。虽然已填充全部的现有搜索条件,但默认情况下仅下列搜索条件处于活动状态:“服务器”、MessageID、“开始”和“结束”。“开始”的值早于所选邮件跟踪日志条目的时间戳 10 分钟。“结束”的值晚于所选邮件跟踪日志条目的时间戳 10 分钟。

如果要执行其他邮件跟踪日志搜索,请接受或修改所选的标准,再单击“下一步”。

若要将所有搜索条件重置为默认值,就像刚打开邮件跟踪工具一样,请在控制台树中单击“重新启动当前任务”。

若要返回到邮件跟踪工具,请在控制台树中单击“重新启动当前任务”。

若要关闭邮件跟踪工具,请单击“关闭”。

详细信息

有关详细信息,请参阅下列主题: