如何使用 PowerShell 和 EWS 将邮件消息导出到 EML 或 MSG 文件
How to export mail message to EML or MSG file with PowerShell and EWS
我目前正在开发一个 PowerShell 脚本,该脚本需要将特定邮箱中的所有邮件信息提取为 .eml 或 .msg 文件,并将它们保存在备份服务器上。我将 Powershell 版本 5 与 Exchange 2010 管理控制台模块 (EWS) 一起使用。
目前,我的脚本能够访问收件箱文件夹中的所有邮件及其属性,例如正文、主题、附件等。但是,我找不到一种简单的方法或方法来导出消息(及其附件)。所以我的问题是,Exchange 2010 中的 EWS 是否提供了一种方法来 extract/save 来自邮箱的邮件?
这是我的脚本:
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services.2\Microsoft.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
在我们加载电子邮件之前抓住主题(主题是 'lost')。
$mail.Load($mailProps)
加载电子邮件和 mime 内容。
最后 3 $fStream
行将 MIME 内容写入流。
当然,您需要添加一些规则来清理主题,或者以不同的方式命名电子邮件。
我目前正在开发一个 PowerShell 脚本,该脚本需要将特定邮箱中的所有邮件信息提取为 .eml 或 .msg 文件,并将它们保存在备份服务器上。我将 Powershell 版本 5 与 Exchange 2010 管理控制台模块 (EWS) 一起使用。
目前,我的脚本能够访问收件箱文件夹中的所有邮件及其属性,例如正文、主题、附件等。但是,我找不到一种简单的方法或方法来导出消息(及其附件)。所以我的问题是,Exchange 2010 中的 EWS 是否提供了一种方法来 extract/save 来自邮箱的邮件?
这是我的脚本:
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services.2\Microsoft.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
在我们加载电子邮件之前抓住主题(主题是 'lost')。
$mail.Load($mailProps)
加载电子邮件和 mime 内容。
最后 3 $fStream
行将 MIME 内容写入流。
当然,您需要添加一些规则来清理主题,或者以不同的方式命名电子邮件。