从Exchange下载电子邮件作为HTML的脚本,不能使用outlook

时间:2014-03-06 02:22:59

标签: powershell exchangewebservices

我已经有一个脚本可以使用EWS下载电子邮件附件,以避免安装/打开Outlook。 我现在想要保存电子邮件内容,最好是作为HTML文件保存,否则保存为.eml或.msg。

关于附件的另一个主题是:Download attachments with multiple subjects from Exchange

我希望现有的脚本能够以某种方式进行调整,但老实说我不知道​​。

$MailboxName = "me@mymail.com"
$Subjects = @(
          'Subject1',
          'Subject2'
        )

[regex]$SubjectRegex = ‘^(?i)(‘ + (($Subjects |foreach {[regex]::escape($_)}) –join “|”) + ‘)$’

$downloadDirectory = "C:\temp"


Function FindTargetFolder($FolderPath){
$tfTargetidRoot = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot,$MailboxName)
$tfTargetFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$tfTargetidRoot)

for ($lint = 1; $lint -lt $pfArray.Length; $lint++) {
    $pfArray[$lint]
    $fvFolderView = new-object Microsoft.Exchange.WebServices.Data.FolderView(1)
    $SfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+isEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,$pfArray[$lint])
            $findFolderResults = $service.FindFolders($tfTargetFolder.Id,$SfSearchFilter,$fvFolderView)
    if ($findFolderResults.TotalCount -gt 0){
        foreach($folder in $findFolderResults.Folders){
            $tfTargetFolder = $folder               
        }
    }
    else{
        "Error Folder Not Found"
        $tfTargetFolder = $null
        break
    }   
}
$Global:findFolder = $tfTargetFolder
}

$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll"
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)


$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sidbind = "LDAP://<SID=" + $windowsIdentity.user.Value.ToString() + ">"
$aceuser = [ADSI]$sidbind

$uri=[system.URI] "https://webmail.com/EWS/Exchange.asmx"
$service.Url = $uri

FindTargetFolder($ProcessedFolderPath)

$folderid = new-object  Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName)
$InboxFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)
$Sfsub = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.ItemSchema]::Subject,$Subject[0])
$sfCollection = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection([Microsoft.Exchange.WebServices.Data.LogicalOperator]::And);
$sfCollection.add($Sfsub)
$sfCollection.add($Sfha)
$view = new-object Microsoft.Exchange.WebServices.Data.ItemView(2000)
$frFolderResult = $InboxFolder.FindItems($sfCollection,$view)

foreach ($miMailItems in $frFolderResult.Items)
 {
$miMailItems.body.text | set-content C:\temp
 }

1 个答案:

答案 0 :(得分:1)

使用其他脚本中的foreach循环:

foreach ($miMailItems in $frFolderResult.Items)
 {
  $miMailItems.body.text | set-content <filepath>
 }

您需要为输出文件提供文件命名方案,但将电子邮件正文文本输出到文件是相对微不足道的。