我们经常遇到需要将传输队列中的邮件进行重播的情况,下面简单介绍如何操作:
Exchange传输邮件是先应用程序将需要发送的邮件进行一个格式转换,转换为eml格式的文本文件,然后又Pickup(分拣程序)将.eml文件放置在C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Pickup目录下,然后又SMTP入站服务器将邮件提交道SMTP服务数据库中进行传输。需要注意eml文件必须满足如下要求:
1)、仅仅只有扩展名称为.eml的文件才能被Exchange的Pickup程序处理。
2)、eml文件中To,cc,Bcc列必须有正确的SMTP地址格式。(也就是收件人地址或抄送地址必须是正确的SMTP地址)
3)、eml文件中From或Sender列必须有一个SMTP地址。
4)、对应明文邮件,正文和邮件头之间必须有空格。(MIME的加密邮件没有这个要求)
5)、eml文件中邮件头大小最大为64KB,并且要求收件人不要超过100人。
一般通过命令AssembleMessage导出的eml格式都是符合要求的。下面是Exchange的SMTP服务器工作过程。
下面介绍Exchange 2013/2016如何重播队列操作方法。
1、通过命令获取特定队列信息。
Get-Queue -Filter {MessageCount -gt 10 } 获取消息数量大于10的队列。
2、使用命令将需要进行操作队列进行搁置。(要导出队列数据必须将该队列中的所有传输中的邮件的状态设置为搁置。不然会收到如下错误信息)
Get-Message -Queue CLDB02\7 | Suspend-Message -Confirm:$False
3、使用如下命令将需要重播队列中的邮件导出为eml格式。(具体可以参考:
[email protected](Get-Message -Queue CLlDB02\7)
$theMessages | foreach {$i++; Export-Message $_.Identity | AssembleMessage –path ("c:\3\"+$i+".eml")}
命令: AssembleMessage 是必须的,必须有该命令对导出的文件二进制流进行转换和筛选。
4、将导出的.eml文件复制到Pickup目录下(获取Pickup目录位置可以通过命令:Get-TransportService -Identity clmaildb01 | fl name,*pickup*,查看PickupDirectoryPath的目录位置),即可进行邮件队列重播,例如:C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Pickup。
关于导出邮件队列数据可以参考:https://technet.microsoft.com/en-us/library/aa998625(v=exchg.160).aspx
导出服务器上某个域名邮件队列邮件:
Get-Message -Queue "Server1\contoso.com" -ResultSize Unlimited | ForEach-Object {Suspend-Message $_.Identity -Confirm:$False; $Temp="C:\ExportFolder\"+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp}
导出某个服务器上所有的邮件队列:
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}