【问题标题】:To filter mails from inbox which are sent to another recipient?过滤收件箱中发送给其他收件人的邮件?
【发布时间】:2017-05-08 10:40:33
【问题描述】:

在 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");

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

说,过滤发送到abc@example.com的邮件。
我的邮件 ID 也会出现在收件人或抄送中的这些邮件中。我会很高兴找到一种与 Outlook 互操作的可能方式。

【问题讨论】:

    标签: c# outlook interop office-interop


    【解决方案1】:

    您可以使用如下搜索查询来搜索 PR_DISPLAY_TO MAPI 属性的匹配项(将 PR_DISPLAT_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 查询扩展为对 PR_DISPLAY_NAME 和 @987654325 的收件人子限制@ 每个收件人的属性 (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' ")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多