从Exchange Server中的队列导出消息

在 Exchange Server 中的邮箱服务器和边缘传输服务器上,可以将队列中的邮件导出到文件。 导出的消息不会从队列中删除。 邮件的副本在指定位置以纯文本文件的形式创建。 您可以在记事本或 Outlook 中查看邮件文件,并且可以使用 Exchange 组织内部或外部的任何其他邮箱服务器或边缘传输服务器上的重播目录重新提交邮件文件。

开始前,有必要了解什么?

  • 估计完成每个步骤时间:5 分钟

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

  • 若要从传递队列、提交队列或无法访问队列导出消息,消息必须处于“挂起”状态。 对于活动正常的队列,请先暂停队列,以便随后可以暂停消息。 带毒邮件队列中的邮件已处于挂起状态。 有关详细信息,请参阅 挂起队列挂起队列中的消息

  • 不能使用 Exchange Toolbox 中的队列查看器导出邮件。 但是,在使用 Exchange 命令行管理程序导出邮件之前,可以使用队列查看器来查找、标识和挂起邮件。 有关队列查看器的详细信息,请参阅队列查看器。 若要了解如何在本地 Exchange 组织中打开 Exchange 命令行管理程序,请参阅 Open the Exchange Management Shell

  • 从队列中导出邮件时,不会将邮件从队列中删除。 如果使用 Replay 目录重新提交导出的消息,则应从队列中删除这些消息,以避免重复的消息传递。 有关详细信息,请参阅 从队列中删除消息

  • 验证有关导出消息文件的目标位置的以下信息:

    • 在导出任何邮件之前,目标文件夹必须存在,并且不会为你创建。 如果未指定完整路径,则文件将写入当前 Exchange 命令行管理程序工作目录。
    • 路径可以是 Exchange 服务器的本地路径,也可以是远程服务器上共享的 UNC 路径, (\server\share) 。
    • 你的帐户需要在目标文件夹中具有 “写入 ”权限。
  • 我们将消息的 InternetMessageID 属性值用于导出的消息文件名,以帮助确保唯一性。 这些过程包括删除尖括号 (> 和 <) 的步骤,因为它们在文件名中是不允许的。 此外,我们使用 .eml 文件扩展名,以便你可以轻松地在 Outlook 中打开文件,或使用 Replay 目录重新提交文件。

  • 有关队列和消息的标识和筛选器的详细信息,请参阅以下主题:

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

提示

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

使用 Exchange 命令行管理程序从队列导出特定邮件

若要从队列中导出特定消息,请使用以下语法:

Export-Message -Identity <MessageIdentity> | AssembleMessage -Path <FilePath>\<FileName>.eml

此示例在名为 Mailbox01 的服务器上执行以下操作:

  1. 挂起 contoso.com 传递队列。

  2. 挂起 队列中 InternalMessageID 值为 1234 的消息。

  3. 将消息的副本导出到文件 D:\contoso Export\export.eml。

Suspend-Queue Mailbox01\contoso.com
Suspend-Message -Identity Mailbox01\contoso.com\1234
Export-Message -Identity Mailbox01\contoso.com\1234 | AssembleMessage -Path "D:\Contoso Export\export.eml"

使用 Exchange 命令行管理程序从队列导出所有邮件

若要导出队列中的所有消息,并使用每条消息的 InternetMessageID 值作为文件名,请使用以下语法:

Get-Message -Queue <QueueIdentity> -ResultSize Unlimited | ForEach-Object {$Temp=<Path>+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}

此示例在名为 Mailbox01 的服务器上执行以下操作:

  1. 挂起 contoso.com 传递队列。
  2. 挂起队列中的所有消息。
  3. 将邮件的副本导出到名为 D:\Contoso Export 的本地文件夹。
Suspend-Queue Mailbox01\contoso.com
Get-Queue Mailbox01\contoso.com | Get-Message -ResultSize Unlimited | Suspend-Message
Get-Message -Queue Mailbox01\Contoso.com -ResultSize Unlimited | ForEach-Object {$Temp="D:\Contoso Export\"+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}

使用 Exchange 命令行管理程序从服务器上的所有队列导出特定消息

若要从服务器上的所有队列导出特定消息,并使用每条消息的 InternetMessageID 值作为文件名,请使用以下语法:

Get-Message -Filter "<MessageFilter>" [-Server <ServerIdentity>] -ResultSize Unlimited | ForEach-Object {$Temp=<Path>+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}

此示例在名为 Mailbox01 的服务器上执行以下操作:

  1. 挂起服务器上的所有队列。
  2. 从 fabrikam.com 域中的发件人挂起服务器上所有队列中的所有消息。
  3. 将邮件副本导出到名为 D:\Fabrikam Export 的本地文件夹。
Suspend-Queue -Server Mailbox01
Suspend-Message -Filter "FromAddress -like '*@fabrikam.com'" -Server Mailbox01
Get-Message -Filter "FromAddress -like '*@fabrikam.com'" -Server Mailbox01 -ResultSize Unlimited | ForEach-Object {$Temp="D:\Fabrikam Export\"+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}

使用 Exchange 命令行管理程序从服务器上的所有队列导出所有邮件

若要从服务器上的所有队列导出所有消息,并使用每条消息的 InternetMessageID 值作为文件名,请使用以下语法:

Get-Message [-Server <ServerIdentity>] -ResultSize Unlimited | ForEach-Object {$Temp=<Path>+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}

此示例在名为 Mailbox01 的服务器上执行以下操作:

  1. 挂起服务器上的所有队列。
  2. 挂起服务器上所有队列中的所有消息。
  3. 将邮件副本导出到名为 D:\Mailbox01 Export 的本地文件夹。
Suspend-Queue -Server Mailbox01
Get-Queue -Server Mailbox01 | Get-Message -ResultSize Unlimited | Suspend-Message
Get-Message -Server Mailbox01 -ResultSize Unlimited | ForEach-Object {$Temp="D:\Mailbox01 Export\"+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}