Weboldal keresés

Outlook e-mailek olvasása a PowerShell segítségével


Nézzük meg, hogyan lehet megnyitni, olvasni és elemezni az e-maileket egy csatlakoztatott Outlook-postafiókban egy PowerShell-szkriptből. Az Outlook MAPI segítségével közvetlenül elérheti a postafiókot, listázhatja a postafiók elemeit, és elolvashatja az e-maileket (beleértve a feladó címét, tárgyát, törzsét stb.).

Ez a forgatókönyv megköveteli, hogy az Outlook telepítve legyen a számítógépen, és legyen konfigurált postafiókprofil. Bármilyen levelezőszerverről olvashat postafiókot, beleértve az Exchange, az Outlook.com, a Gmail, az AOL, a Yahoo stb.

Ahhoz, hogy a PowerShell hozzáférhessen a postafiók tartalmához, futnia kell az Outlooknak a számítógépen. Ellenőrizze, hogy fut-e az outlook.exe folyamat, és futtassa a háttérben a következő paranccsal:

$OutlookProc = ( Get-Process | where { $_.Name -eq "OUTLOOK" } )
if ( $OutlookProc -eq $null ) { Start-Process outlook.exe -WindowStyle Hidden; Start-Sleep -Seconds 5 }

Most be kell töltenie a .NET osztályt, és létre kell hoznia egy Outlook-példányt:

Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application

A postafiók tartalma a MAPI protokoll névterén keresztül érhető el:

$namespace = $Outlook.GetNameSpace("MAPI")

Egy postafiókban több mappa is lehet. Postafiók mappáinak listázása:

$NameSpace.Folders.Item(1).Folders | FT FolderPath

Megjelenítheti a mappák listáját fanézetben, és megszámolhatja az egyes mappákban lévő e-mail elemek számát:

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 ""

A bejövő e-mailek mappa alapértelmezett nevének megtudásához futtassa a következő parancsot (alapértelmezés szerint ez a Inbox mappa, de ez a név a nyelvi/regionális beállításoktól függően változhat):

$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)

Listázza az e-maileket a Beérkezett üzenetek mappában a következő formátumban: feladó címe, címzettje, tárgya, mérete és a beérkezés dátuma.

$inbox.Items | ft SenderEmailAddress, To, Subject, Size, ReceivedTime

Az egyszerű PowerShell Where-Object szűrő lehetővé teszi adott e-mailek keresését. Például listázza ki a mai napon egy adott feladótól kapott e-maileket:

$currentDate = Get-Date
$inbox.Items |  Where-Object { $_.ReceivedTime -like "*$currentDate*"   -and $_.SenderEmailAddress -eq "[email "}

Megjelenítheti az e-mail tárgyát és törzsét. Az e-mail törzse egyszerű szövegben is megjeleníthető (

Body

tulajdonság) vagy HTML formátumban (

HTMLBody

ingatlan). Ebben a példában a legutóbb kapott e-mail törzse jelenik meg:

$inbox.Items($inbox.Items.Count)|select SenderEmailAddress,subject,Body,HTMLBody|fl

Az UnRead attribútum segítségével ellenőrizheti, hogy az Exchange-felhasználó elolvasta-e az e-mailt.

Ha az e-mail mellékletet tartalmaz, elmentheti a mellékletet egy helyi meghajtóra:

$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)")
}

Az utoljára kapott e-mail törlése a postafiókból:

$email= $inbox.Items($inbox.Items.Count)
$Email.Delete()

A PowerShell segítségével hozzáférhet Outlook-postafiókjához olyan automatizálási szkriptekben, amelyek megkövetelik bizonyos műveletek végrehajtását, amikor bejövő e-mailt kap. A Feladatütemező feladat segítségével futtasson egy PS1-szkriptet a postafiók ellenőrzéséhez.