【问题标题】:PowerShell EWS Save as for e-mailsPowerShell EWS 另存为电子邮件
【发布时间】:2015-08-23 21:10:54
【问题描述】:

如何借助 PowerShell 中的 EWS 将电子邮件保存在磁盘上?我在网上搜索了一些answers,但这都是针对 C# 或 VB 的。

我现在拥有的代码完成了我需要的一切,将电子邮件复制到 MS Outlook 中的正确文件夹等等,但我似乎无法弄清楚如何将邮件保存在文件夹中 ($ENV:Temp ) 在磁盘上。

这可以是 EML 或 MSG 格式,这对我来说并不重要,但它需要与它所拥有的所有内容(正文、附件、From、To、..)一起保存。

我试过$Mail | Out-File "$env:TEMP\test.eml",它确实生成了一个 15 KB 的文件,但是当我用 MS Outlook 打开它时它似乎是空的。

感谢您的帮助。

【问题讨论】:

    标签: email powershell exchangewebservices


    【解决方案1】:

    与此同时,我找到了解决方案:

    $Service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList $ExchangeVersion
    $Service.Credentials = $Credentials.GetNetworkCredential()
    $Service.AutodiscoverUrl($BNLMailbox)
    
    Try {
        $PowerShellPathId = Find-MailFolderIDHC @FindMailParams -Path $BNLMailboxInbox
        $Inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($Service,$PowerShellPathId)
    }
    Catch {
        # Exchange version not correct or path not found
        throw "Move-MailsHC $($Global:Error[0].Exception.Message)"
    }
    
    $Props = [Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties
    $PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet($Props)
    $PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text
    $PropertySet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::MimeContent)
    
    $Date = [Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeReceived
    $TimeSpan = (Get-Date).AddHours(-$HoursAgo)
    $Filter = New-Object -TypeName Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThan -ArgumentList $Date,$TimeSpan
    
    $View =  New-Object Microsoft.Exchange.WebServices.Data.ItemView(100)
    $View.OrderBy.add([Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeReceived,
        [Microsoft.Exchange.WebServices.Data.SortDirection]::Ascending)
    
     foreach ($Mail in $Mails.Items) {
        $TmpFolder = Join-Path $env:TEMP 'Move-MailsHC'
        if (-not(Test-Path $TmpFolder)) {
            New-Item $TmpFolder -ItemType Directory | Out-Null
        }
        Write-Verbose "Save original e-mail in temp '$TmpFolder'"
        $TmpMail = Join-Path $TmpFolder 'Mail.eml'
        $IoFile = New-Object System.IO.FileStream($TmpMail, [System.IO.FileMode]::Create) 
        $IoFile.Write($Mail.MimeContent.Content, 0, $Mail.MimeContent.Content.Length)
        $IoFile.Close()
    
        Write-Verbose "Download e-mail attachments to temp '$TmpFolder'"
        foreach ($A in $Mail.Attachments){
            $A.Load()
            $fiFile = New-Object System.IO.FileStream((Join-Path $TmpFolder $A.Name.ToString()), [System.IO.FileMode]::Create)
            $fiFile.Write($A.Content, 0, $A.Content.Length)
            $fiFile.Close()
            Write-Verbose "Downloaded Attachment: $($A.Name.ToString())"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多