從 Exchange Server 中的佇列匯出訊息
在信箱伺服器和 Exchange Server 中的 Edge Transport Server 上,您可以將佇列中的訊息匯出至檔案。 匯出的訊息不會從佇列中移除。 訊息的複本會在指定的位置做為純文字檔。 您可以在記事本或 Outlook 中檢視郵件檔案,而且您可以使用 Exchange 組織內部或外部任何其他信箱伺服器或 Edge Transport 伺服器上的 Replay 目錄重新提交郵件檔案。
開始之前有哪些須知?
每項程序的預估完成時間:5 分鐘
您必須已獲指派權限,才能執行此程序或這些程序。 若要查看您需要的權限,請參閱 郵件流程權限主題中的「佇列」項目。
若要從傳遞佇列、提交佇列或無法連線的佇列匯出訊息,訊息必須處於暫停狀態。 針對作用中且狀況良好的佇列,您必須先暫停佇列,然後才可以暫停訊息。 毒藥郵件佇列中的郵件已處於「已擱置」狀態。 如需詳細資訊,請 參閱暫止佇列 和 佇列中的暫止訊息。
您無法使用 Exchange 工具箱的佇列檢視器來匯出郵件。 不過,在使用 Exchange 管理命令介面匯出訊息之前,您可以使用佇列檢視器來尋找、識別和暫停訊息。 如需佇列檢視器的詳細資訊,請參閱 佇列檢視器。 若要了解如何在內部部署 Exchange 組織中開啟 Exchange 管理命令介面,請參閱 Open the Exchange Management Shell。
從佇列中匯出郵件時,不會從佇列中移除郵件。 如果您使用 Replay 目錄重新提交匯出的訊息,您應該從佇列中移除訊息,以避免重複的訊息傳遞。 如需詳細資訊,請參閱 從佇列移除訊息。
確認匯出之訊息檔案的目標位置的下列資訊:
- 在您匯出任何訊息之前,目的檔案夾必須存在,而且不會為您建立。 如果您未指定完整路徑,檔案會寫入目前的 Exchange 管理命令介面工作目錄。
- 路徑可以是 Exchange 伺服器的本機路徑,也可以是遠端伺服器上共用的 UNC 路徑 (\server\share) 。
- 您的帳戶必須具有目的檔案夾中的 寫 入許可權。
我們會針對匯出的訊息檔案名使用訊息的 InternetMessageID 屬性值,以協助確保唯一性。 這些套裝程式含移除角括弧 (> 和 <) 的步驟,因為檔案名中不允許使用。 此外,我們使用 .eml 副檔名,讓您可以輕鬆地在 Outlook 中開啟檔案,或使用 Replay 目錄重新提交檔案。
如需佇列中佇列和訊息的身分識別和篩選的詳細資訊,請參閱下列主題:
如需適用於此主題中程序的快速鍵相關資訊,請參閱 Exchange 系統管理中心的鍵盤快速鍵。
提示
有問題嗎? 在 Exchange 論壇中尋求協助。 此論壇的網址為:Exchange Server、Exchange Online 或 Exchange Online Protection。
使用 Exchange 管理命令介面從佇列匯出特定訊息
若要從佇列匯出特定訊息,請使用下列語法:
Export-Message -Identity <MessageIdentity> | AssembleMessage -Path <FilePath>\<FileName>.eml
此範例會在名為 Mailbox01 的伺服器上採取下列動作:
暫停 contoso.com 傳遞佇列。
暫停佇列中 InternalMessageID 值為 1234 的訊息。
將訊息複本匯出至檔案 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 的伺服器上採取下列動作:
- 暫停 contoso.com 傳遞佇列。
- 暫停佇列中的所有訊息。
- 將訊息的複本匯出至名為 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 的伺服器上採取下列動作:
- 暫停伺服器上的所有佇列。
- 從 fabrikam.com 網域中的寄件者暫停伺服器上所有佇列中的所有訊息。
- 將訊息的複本匯出至名為 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 的伺服器上採取下列動作:
- 暫停伺服器上的所有佇列。
- 暫停伺服器上所有佇列中的所有訊息。
- 將訊息的複本匯出至名為 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}