Могу ли я сохранить вложение электронной почты из Office 365 в общую папку с помощью PowerShell?

Я видел несколько решений, которые используют PowerShell для автоматизации локального клиента Outlook, но я хочу, чтобы это работало на стороне сервера: выходить на сервер с заданной учетной записью, проверять наличие непрочитанных сообщений, сохранять любые вложения в общую папку и отмечать сообщение прочитано.


person Keith    schedule 04.05.2016    source источник


Ответы (2)


Для этого требуется установить API управляемых служб Exchange.

$ewsPath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
Add-Type -Path $ewsPath

$ews = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService
$cred = (Get-Credential).GetNetworkCredential()
$ews.Credentials = New-Object System.Net.NetworkCredential -ArgumentList $cred.UserName, $cred.Password, $cred.Domain
$ews.AutodiscoverUrl( "[email protected]", {$true} )
$results = $ews.FindItems(
    "Inbox",
    ( New-Object Microsoft.Exchange.WebServices.Data.ItemView -ArgumentList 100 )
)
$MailItems = $results.Items | where hasattachments

foreach ($MailItem in $MailItems){

    $MailItem.Load()

    foreach($Attachment in $MailItem.Attachments){
        $Attachment.Load()
        $File = new-object System.IO.FileStream(("C:\Temp\” + $attachment.Name.ToString()), [System.IO.FileMode]::Create)
        $File.Write($attachment.Content, 0, $attachment.Content.Length)
        $File.Close()
    }
}
person Keith    schedule 06.05.2016
comment
Спасибо. Это прекрасно работает. Не могли бы вы рассказать о том, как сохранять только файловые вложения с заданным расширением и электронное письмо, приходящее после определенной даты и времени (или, скажем, каждые 15 минут для опроса электронных писем)? - person Fandango68; 13.12.2019

Вы работаете в среде Exchange? Если это так, и веб-службы Exchange доступны в сети, это вариант.

person Monterey Harris    schedule 04.05.2016
comment
Мы находимся в гибридной среде Exchange. Я пытаюсь прочитать EWS, но если у вас есть какая-то быстрая и грязная PowerShell для подключения и извлечения электронной почты из почтового ящика, это было бы большим подспорьем ... - person Keith; 06.05.2016
comment
О, эй, я нашел код, который работает. Теперь смотрю, смогу ли я снять вложения. - person Keith; 06.05.2016