在VSTO中使用交换电子邮件搜索Outlook收件箱

时间:2019-08-22 19:04:08

标签: c# outlook vsto outlook-addin

我正在尝试在一个加载项中想通过电子邮件地址进行搜索,但是问题是由于Outlook连接到Exchange服务器,因此所有电子邮件地址都以Exchange格式显示。我想要实现的是像在此示例代码中一样通过电子邮件本身进行搜索-

MAPIFolder inboxFolder = Application.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Items emails = inboxFolder.Items.Restrict($"[SenderEmailAddress] = abc@xyz.com");

当然SenderEmailAddress与实际的电子邮件地址不匹配,因为SenderEmailAddress是Exchange格式。

当前,我必须遍历所有电子邮件,然后使用这段代码来保留查找实际电子邮件地址的时间,但这显然很耗时,因此,我想知道是否有解决方法。

private static string GetSenderEmailAddress(MailItem mail)
{
    AddressEntry sender = mail.Sender;
    string SenderEmailAddress = "";

    if (sender.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry || sender.AddressEntryUserType == OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
    {
        ExchangeUser exchUser = sender.GetExchangeUser();
        if (exchUser != null)
        {
            SenderEmailAddress = exchUser.PrimarySmtpAddress;
        }
     }
     else
     {
            SenderEmailAddress = mail.SenderEmailAddress;
     }

     return SenderEmailAddress;
}

1 个答案:

答案 0 :(得分:2)

大多数Exchange邮件还将发件人SMTP地址公开为一个单独的属性(PidTagSenderSmtpAddress-使用OutlookSpy查看邮件:单击IMessage按钮)。

您可以将搜索查询修改为以下内容:

@SQL=(SenderEmailAddress = 'abc@xyz.com') or ("http://schemas.microsoft.com/mapi/proptag/0x5D01001F" = 'abc@xyz.com')