使用PowerShell从outlook中读取最新的电子邮件

时间:2017-11-17 07:28:44

标签: powershell outlook

我正在尝试使用主题行“自动化”阅读我的Outlook电子邮件,并使用自定义脚本进一步处理。下面的脚本使用主题行读取电子邮件,但它读取主题为“自动化”的整个电子邮件计数。

我希望能够只读取最新的电子邮件并仅处理该特定的电子邮件内容,并将该电子邮件标记为未读。然后阅读具有相同主题的下一封新电子邮件,并仅处理特定内容。

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
$folder.items | where { $_.subject -match 'Automation' } | Select-Object -Property body

假设我有10封新电子邮件,主题为“自动化”处理第10封电子邮件并标记为已阅读并继续处理从9到1。

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

只需使用foreach-object,您可以通过修改邮件项目的未读属性(https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook._mailitem.unread.aspx)将邮件标记为已读/未读

$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$folder=$namespace.GetDefaultFolder(6)
$folder.Items | 
    ?{$_.subject -match "automation" } |
    sort receivedtime -desc | 
    %{
         echo $_.body #do stuff with body 
         $_.Unread=$false #mark as read        
     }

在您发表评论后,您可以验证您的Outlook版本是否公开了未读属性: $folder.Items |select -first 1 | get-member 你应该找到以下财产:
UnRead Property bool UnRead () {get} {set}