在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互操作的可能方式。
答案 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