如何使用 PowerShell 閱讀 Outlook 電子郵件
讓我們看看如何從 PowerShell 腳本中打開、閱讀和解析已連接的 Outlook 郵箱中的電子郵件。 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


簡單的 PowerShellWhere-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 用戶閱讀,未讀可以使用屬性。
如果電子郵件有附件,您可以將附件文件保存到本地驅動器:
$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 腳本來檢查您的郵箱。
