如何使用 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 脚本来检查您的邮箱。
