要过滤收件箱中发送给其他收件人的邮件吗?
问题描述:
在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找到一种可能的方式。
答
您可以使用搜索查询类似下面的搜索在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_NAME
和PR_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]' ")