如何使用PowerShell和EWS将邮件邮件导出到EML或MSG文件



我当前正在处理一个PowerShell脚本,该脚本需要从特定邮箱中提取所有邮件邮件为.eml或.msg文件并将其保存在备份服务器上。我正在使用Exchange 2010管理控制台模块(EWS)的PowerShell版本5。

当前,我的脚本能够访问收件箱文件夹中及其属性(例如身体,主题,附件等)中的所有消息。但是,我找不到一种简单的方法或方法来导出消息(附加)。因此,我的问题是,EWS在Exchange 2010中是否提供了一种从邮箱中提取/保存消息的方法?

这是我的脚本:

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
$dllpath = "C:Program FilesMicrosoftExchangeWeb Services1.2Microsoft.Exchange.WebServices.dll"
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1)
$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sidbind = "LDAP://<SID=" + $windowsIdentity.user.Value.ToString() + ">"
$aceuser = [ADSI]$sidbind
$service.AutodiscoverUrl($aceuser.mail.ToString())
$MailboxName = get-mailbox -Identity myMailBox@myWorkPlace.com
$folderidcnt = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName.PrimarySmtpAddress.ToString())
$rootfolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $folderidcnt)

$offset = 0;
$view = new-object Microsoft.Exchange.WebServices.Data.ItemView(10000, $offset)
$response = $service.LoadPropertiesForItems($results, [Microsoft.Exchange.WebServices.Data.PropertySet]::FirstClassProperties)
foreach ($mail in $results){
if ($mail.ToString() -eq "Microsoft.Exchange.WebServices.Data.EmailMessage"{
    **"Function to export this message an an .eml or .msg file on a remote shared folder"**
     }
}

代码的最后一部分需要:

if ($mail.ToString() -eq "Microsoft.Exchange.WebServices.Data.EmailMessage") {
    $mailSubject = $mail.Subject
    $mailProps = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.ItemSchema]::MimeContent)
    $mail.Load($mailProps)
    #TODO: clean up $mailSubject so it's filesystem friendly
    $fStream = New-Object System.IO.FileStream("C:Temp$mailSubject.eml", [System.IO.FileMode]::Create)
    $fStream.Write($mail.MimeContent.Content, 0, $mail.MimeContent.Content.Length)
    $fStream.Close()
}

$mailSubject = $mail.Subject抓住主题,在我们加载电子邮件之前(然后是"丢失")。

$mail.Load($mailProps)加载电子邮件&amp;哑剧内容。

最后3个$fStream行将MIME内容写入流。

当然,您需要添加一些规则来清理主题或以不同的方式命名电子邮件。

最新更新