我想在 Outlook 中为非标准电子邮件标头创建一个搜索文件夹。即这个:
X-Bugzilla-Changed-Fields: Status Resolution
是否可以搜索此类标题?我使用的是 Outlook 2007。
答案1
我最近也尝试过同样的操作,在搜索网络时遇到了您的问题。我也没有找到使用搜索文件夹检查邮件头的方法。我的假设是因为互联网邮件头实际上并不是“Exchange 字段”,这意味着我不相信在 Exchange 服务器内部发送的任何“内部网”电子邮件(例如您发送给同事的带有搞笑猫咪图片 [LOLZ!] 的电子邮件...)有这样的邮件头。但这是我想到的解决方法,我正在使用。
我在规则向导中设置了一条新规则,即在收到新邮件时检查邮件头。如果发现特定字符串,则将邮件分配到特定类别。就我而言,我正在寻找来自我们的 Best Practical Request Tracker 服务器的邮件,每个邮件头中都有字符串“RT-ticket:”。如果我的规则在邮件头中找到此字符串,则将邮件分配到我创建的名为“RT Tickets”的类别。(我创建此类别时没有颜色,因此不太显眼。)然后我可以创建一个搜索文件夹,仅查找该类别的邮件。虽然步骤多,但问题解决了。我在 Outlook 2007 中完成了此操作,但它应该适用于支持规则向导检查邮件头然后分配到类别的任何 Outlook 版本。
这样做的缺点是 1) 我不断增长的列表中又多了一个规则,2) 如果我想将其应用于已收到的电子邮件,我需要先手动浏览并针对这些文件夹运行规则。此时我只关心收件箱中现有的新邮件或即将收到的新邮件,因此我只需将规则设置为在创建时运行,这样就搞定了。不过,使用类别的一个好处是您可以将其显示为邮件列表中的一列。我不确定我是否会按照我的意图使用搜索文件夹,我可能只是按类别对收件箱进行排序以找到所需的邮件。
如果有人需要扩展创建规则的步骤,我可以这样做,只需发表评论即可。但我希望,如果一个人足够了解互联网电子邮件标题,那么创建 Outlook 规则将是老生常谈。他们拥有的向导非常简单。
答案2
此 PowerShell 脚本搜索收件箱中的所有邮件头以查找匹配项。它可能需要一段时间才能运行,具体取决于您的收件箱大小。需要注意一些事项,其中最重要的就是可能存在残留的 outlook.exe 进程。这可以通过任务管理器手动终止,也可以通过 以编程方式终止get-process "outlook" | kill
。由于 PoweShell 几乎无处不在,因此我们假设您可以访问它,但是您使用的特定操作系统可能对此的支持有限。
$MatchString = "X-Mailer: YahooMailWebService/0.8.201.700"
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$namespace = new-object -comobject outlook.application
$MAPI = $namespace.GetNamespace("MAPI")
$Inbox = $MAPI.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox).Items
$Headers = `
foreach ( $MailItem in $Inbox ) {
$MailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
}
$namespace.Quit()
$MatchingHeaders = $Headers | where { $_.contains( $MatchString ) }
#sample output
$MatchingHeaders | Select-Object -First 1
如果存在一组非零的匹配项,则会返回类似以下内容。
已收到:来自 q0plumsmtp03-06.purd.phy5.mysrver.net (68.178.213.11),发送者为 q0PWrc6HT002.rc6.mysrver.net (148.168.131.21),Microsoft SMTP 服务器 ID 为 14.2.18.1;2014 年 8 月 13 日,星期三 18:42:57 -0700 [...]
然后,您可以将 $MatchString 赋值更改为您要查找的标题字符串。如果您想使用正则表达式概括搜索,PowerShell 也可以做到这一点。