2017-05-08 74 views
1

在Outlook互操作, 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"); 

同样,有没有办法来筛选发送到比我其他特定收件人的邮件。

说,滤波器邮件发送到[email protected]
我的邮件ID也将存在于在达到或处于CC那些邮件。我会更乐意通过Outlook interop找到一种可能的方式。

回答

1

您可以使用搜索查询类似下面的搜索在PR_DISPLAY_TO MAPI属性匹配(与0x0E03001F取代0x0E04001F为PR_DISPLAT_CC)

@SQL="http://schemas.microsoft.com/mapi/proptag/0x0E04001F" LIKE '%[email protected]%' 

但是请记住这PR_DISPLAT_TO/PR_DISPLAY_CC可能会或可能不会包含电子邮件地址;他们可能只包含显示名称。

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

如果使用Redemption(任何语言)是一种选择,你可以使用RDOFolder。 Items.Restrict - 与Outlook对象模型,它扩展到/ CC/BCC查询到受体子限制对每个收件人(RES_SUBRESTRICTION/PR_MESSAGE_RECIPIENTS/RES_OR/PR_DISPLAY_NAME | PR_EMAIL_ADDRESS)PR_DISPLAY_NAMEPR_EMAIL_ADDRESS性能。

set Session = CreateObject("Redemption.RDOSession") 
Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
set Folder = Session.GetFolderFromID(Application.ActiveExplorer.CurrentFolder.EntryID) 
set restrItems = Folder.Items.Restrict(" TO = '[email protected]' ") 

您还可以指定在aquery Recipients属性 - 它会针对所有类型的接受者相匹配(到/ CC/BB):

set restrItems = Folder.Items.Restrict(" Recipients = '[email protected]' ") 
相关问题