Давайте розглянемо, як відкривати, читати та аналізувати електронні листи в підключеній поштовій скриньці Outlook за допомогою сценарію PowerShell. Outlook MAPI дозволяє отримувати прямий доступ до поштової скриньки, перераховувати елементи поштової скриньки та читати електронні листи (включаючи адресу відправника, тему, текст тощо).
Цей сценарій вимагає, щоб на комп’ютері було інстальовано програму Outlook і налаштовано профіль поштової скриньки. Ви можете читати поштову скриньку з будь-якого поштового сервера, включаючи Exchange, Outlook.com, Gmail, AOL, Yahoo тощо.
Щоб PowerShell мав доступ до вмісту поштової скриньки, на комп’ютері має бути запущено Outlook. Перевірте, чи запущено процес outlook.exe, і запустіть його у фоновому режимі за допомогою команди:
$OutlookProc = ( Get-Process | where { $_.Name -eq "OUTLOOK" } )
if ( $OutlookProc -eq $null ) { Start-Process outlook.exe -WindowStyle Hidden; Start-Sleep -Seconds 5 }
Тепер вам потрібно завантажити клас .NET і створити екземпляр Outlook:
Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
Вміст поштової скриньки доступний через простір імен протоколу MAPI:
$namespace = $Outlook.GetNameSpace("MAPI")
У поштовій скриньці може бути кілька папок. Список папок поштової скриньки:
$NameSpace.Folders.Item(1).Folders | FT FolderPath
Ви можете відобразити список папок у вигляді дерева та підрахувати кількість елементів електронної пошти в кожній папці:
Function Listfolders
{
param($Folders, $Indent)
ForEach ($Folder in $Folders | sort-object name)
{
write-host $Indent$($Folder.Name)" ("$($Folder.Items.Count)")"
Listfolders $Folder.Folders $Indent" "
}
}
ListFolders $namespace.Folders ""


Щоб дізнатися типову назву папки для вхідних електронних листів, виконайте таку команду (за замовчуванням цеВхідніпапку, але ця назва може відрізнятися залежно від вашої мови/регіональних налаштувань):
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
Список електронних листів у папці «Вхідні» в такому форматі: адреса відправника, одержувач, тема, розмір і дата отримання.
$inbox.Items | ft SenderEmailAddress, To, Subject, Size, ReceivedTime


Простий фільтр PowerShell Where-Object дозволяє шукати певні електронні листи. Наприклад, список електронних листів, отриманих сьогодні від певного відправника:
$currentDate = Get-Date
$inbox.Items | Where-Object { $_.ReceivedTime -like "*$currentDate*" -and $_.SenderEmailAddress -eq "[email protected]"}
Ви можете відобразити тему та основний текст електронного листа. Тіло електронного листа може відображатися у вигляді звичайного тексту (Bodyвластивості) або у форматі HTML (HTMLBodyвласність). У цьому прикладі відображатиметься текст останнього отриманого електронного листа:
$inbox.Items($inbox.Items.Count)|select SenderEmailAddress,subject,Body,HTMLBody|fl


Щоб перевірити, чи електронний лист прочитано користувачем Exchange,Непрочитанеможна використовувати атрибут.
Якщо електронний лист має вкладення, ви можете зберегти файл вкладення на локальному диску:
Докладніше:Як шукати електронні листи за допомогою PowerShell
$email= $inbox.Items($inbox.Items.Count)
if ($Email.Attachments.Count -gt 0) {
$Attachment = $Email.Attachments.Item(1)
$Attachment.SaveAsFile("C:\Downloads\$($Email.Attachments.Item(1).FileName)")
}
Видаліть останнє отримане повідомлення з поштової скриньки:
$email= $inbox.Items($inbox.Items.Count)
$Email.Delete()
Ви можете використовувати PowerShell для доступу до своєї поштової скриньки Outlook у сценаріях автоматизації, які вимагають виконання певних дій під час отримання вхідного електронного листа. Використовуйте завдання «Планувальник завдань», щоб запустити сценарій PS1 для перевірки вашої поштової скриньки.










