过滤收件箱中发送给其他收件人的邮件?

时间:2017-05-08 10:40:33

标签: c# outlook interop office-interop

在Outlook Interop中, using Outlook = Microsoft.Office.Interop.Outlook; 要过滤未读的电子邮件,请使用以下代码

Outlook.Application oApp = new Outlook.Application();
Outlook.NameSpace outlookNameSpace = oApp.Application.GetNamespace("MAPI");
Outlook.MAPIFolder inbox = outlookNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items items = inbox.Items.Restrict("[Unread]=true");

同样,有没有办法过滤发送给我以外的特定收件人的邮件。

说,过滤发送到abc@example.com的邮件  我的邮件ID也会出现在To或CC中的邮件中。我会更高兴找到一个与Outlook互操作的可能方式。

1 个答案:

答案 0 :(得分:1)

您可以使用如下搜索查询来搜索PR_DISPLAY_TO MAPI属性上的匹配项(将PRDISPLAT_CC替换为0x0E04001F和0x0E03001F)

@SQL="http://schemas.microsoft.com/mapi/proptag/0x0E04001F" LIKE '%abc@example.com%'

请注意,PR_DISPLAT_TO / PR_DISPLAY_CC可能包含也可能不包含电子邮件地址;它们只能包含显示名称。

在扩展MAPI级别(C ++或Delphi)上,您可以对收件人创建限制(RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS)。

如果使用Redemption(任何语言)是一个选项,您可以使用RDOFolder。Items.Restrict - 与Outlook对象模型不同,它确实将To / CC / BCC查询扩展为{{每个收件人的1}}和PR_DISPLAY_NAME属性(RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS / RES_OR / PR_DISPLAY_NAME | PR_EMAIL_ADDRESS)。

PR_EMAIL_ADDRESS

您还可以在aquery中指定set Session = CreateObject("Redemption.RDOSession") Session.MAPIOBJECT = Application.Session.MAPIOBJECT set Folder = Session.GetFolderFromID(Application.ActiveExplorer.CurrentFolder.EntryID) set restrItems = Folder.Items.Restrict(" TO = 'abc@example.com' ") 属性 - 它将与所有类型的收件人匹配(至/ cc / bb):

Recipients