要从收件箱中过滤发送给另一个收件人的邮件?

To filter mails from inbox which are sent to another recipient?

在 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 也会出现在“收件人”或“抄送”中的那些邮件中。我会更乐意找到 Outlook 互操作的可能方法。

您可以使用如下所示的搜索查询在 PR_DISPLAY_TO MAPI 属性 上搜索匹配项(将 0x0E04001F 替换为 0x0E03001F for PR_DISPLAY_CC)

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

但是请记住,PR_DISPLAY_TO / PR_DISPLAY_CC 可能包含也可能不包含电子邮件地址;它们可以只包含显示名称。

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

如果使用 Redemption (I am its author - any language) is an option, you can use RDOFolder.Items.Restrict - 与 Outlook 对象模型不同,它确实将 To/CC/BCC 查询扩展到每个收件人的 PR_DISPLAY_NAMEPR_EMAIL_ADDRESS 属性的收件人子限制中(RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS / RES_OR / 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 = 'abc@example.com' ")

您还可以在查询中指定 Recipients 属性 - 它将匹配所有类型的收件人 (to/cc/bcc):

set restrItems = Folder.Items.Restrict(" Recipients = 'abc@example.com' ")