我正在尝试在一个加载项中想通过电子邮件地址进行搜索,但是问题是由于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;
}
答案 0 :(得分:2)
大多数Exchange邮件还将发件人SMTP地址公开为一个单独的属性(PidTagSenderSmtpAddress
-使用OutlookSpy查看邮件:单击IMessage按钮)。
您可以将搜索查询修改为以下内容:
@SQL=(SenderEmailAddress = 'abc@xyz.com') or ("http://schemas.microsoft.com/mapi/proptag/0x5D01001F" = 'abc@xyz.com')