【问题标题】:Search emails by subject using powershell使用 powershell 按主题搜索电子邮件
【发布时间】:2020-09-14 23:01:07
【问题描述】:

全部,

我陷入了以下困境。我在收件箱中获得电子邮件列表,我需要搜索主题中包含特定字符串的电子邮件(然后解析该电子邮件的正文)。我坚持使用正确的语法来按主题过滤电子邮件。 我有这个:

$Outlook = New-Object -comObject Outlook.Application 
$namespace = $Outlook.GetNameSpace("MAPI")
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$emails = $inbox.items
$subjectComparisonExpression = "Meeting topic is: "

但是这些都不起作用:

#1
$inbox.items | Where-Object {$_.Subject -like $subjectComparisonExpression} | Write-Host($_.Subject)

#2
$myemails = $inbox.items | Where-Object {$_.Subject -like $subjectComparisonExpression}
Write-Host($myemails.count)

#3
$myemails = $emails | Where {$_.Subject -like $subjectComparisonExpression} 
Write-Host($myemails.count)

如何获取主题包含$subjectComparisonExpression 的电子邮件列表?

【问题讨论】:

    标签: powershell outlook


    【解决方案1】:

    使用Items 类的Find/FindNextRestrict 方法查找与您的条件相对应的项目。 Restrict 方法是使用Find 方法或FindNext 方法迭代集合中特定项的替代方法。如果项目数量很少,FindFindNext 方法比过滤更快。如果集合中有大量项目,则Restrict 方法的速度明显更快,尤其是如果预计只能找到大型集合中的少数项目。您可以在以下文章中阅读有关它们的更多信息:

    【讨论】:

    • 谢谢!在我只需要完全匹配主题的一部分(如包含)的情况下,如何将它与主题一起使用并不是很明显。不是[Subject] = partialmatch
    • 您也可以将like 用于 Find/FindNext 或 Restrict 方法。见docs.microsoft.com/en-us/office/vba/outlook/How-to/…
    • 好吧,“喜欢”没有用。说“条件无效”。我试过$emails.Restrict("[subject] like '%topic is%'")。起作用的是$emails.Restrict("@SQL="urn:schemas:httpmail:subject" ci_phrasematch 'topic is'")
    • 仅在需要为“urn:schemas:httpmail:subject”转义双引号的代码中
    【解决方案2】:

    问题出在“-like”关键字上。将其替换为“-match”即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2023-03-09
      • 2020-12-04
      • 1970-01-01
      • 2011-09-09
      • 2018-07-13
      • 2022-10-24
      相关资源
      最近更新 更多