首页 > 解决方案 > 使用 VBA 按电子邮件地址域搜索 olFolderSentMail

问题描述

我想使用 VBA 使用电子邮件地址的域在 olFolderSentMail 文件夹中查找邮件。

当我在 Outlook 中制作高级筛选器时,结果就出来了。我从那里得到了sql代码。VBA 中没有结果。

例如,我想同时查找 a@kpmg.com、b@kpmg.com。只有名称在 Outlook 的谁部分中显示为 a 和 b。邮件地址隐藏在名称中。

Sub sentmails()
 
Dim objNS As Outlook.Namespace: Set objNS = GetNamespace("MAPI") Dim
olFolder As Outlook.MAPIFolder

Set olFolder = objNS.GetDefaultFolder(olFolderSentMail)

filterstr = "@SQL=(""http://schemas.microsoft.com/mapi/proptag/0x0e04001f""
CI_STARTSWITH 'kpmg' OR ""http://schemas.microsoft.com/mapi/proptag/0x0e03001f"" CI_STARTSWITH 'kpmg')"

Set arama = olFolder.Items.Restrict(filterstr)

End Sub

标签: excelvbaoutlook

解决方案


首先,您不是在搜索后缀 ( *kpmg.com),而是在搜索前缀 ( kpmg*)。其次,//To属性甚至可能不包含电子邮件地址,只包含姓名。CCBCC

在扩展 MAPI 级别(C++ 或 Delphi)上,可以对邮件收件人创建子限制,但 Outlook 对象模型不会公开它。

如果使用Redemption是一种选择,您可以使用类似于以下脚本的脚本:

Set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
Set folder = Session.GetDefaultFolder(olFolderSentMail)
set restItems = folder.Items.Restrict("Recipients LIKE '%kpmg.com%' ")
MsgBox restItems.Count

推荐阅读