获取收件人的电子邮件地址在Outlook VSTO +阅读邮件提示

本文关键字:提示 VSTO 收件人 电子邮件地址 Outlook 获取 | 更新日期: 2023-09-27 18:05:10

我目前在使用2010年使用VSTO创建的Outlook插件时遇到了问题,我开发了该插件,用于识别电子邮件地址是位于组织内部还是位于组织外部。

当电子邮件被发送出去时,我使用下面的MAPI属性来读取收件人的电子邮件地址。其中addr为AddressEntry对象。

Microsoft.Office.Interop.Outlook.PropertyAccessor pa = addr.PropertyAccessor;
smtpAddress = pa.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E").ToString();

这适用于交换联系人和本地联系人。但是如果你创建一个本地联系人并从全局地址簿中选择电子邮件地址,那么这个MAPI属性就不会出现在那个特定的联系人中。我只需要知道查找联系人(电子邮件地址)是在组织内部还是在组织外部的最佳方法是什么(这种方法也会降低性能,我的组织中有人会一次向500多个用户发送电子邮件,并且通过上述MAPI属性处理内部/外部电子邮件扫描需要10多分钟)。我知道outlook已经在"新邮件"窗口上显示了与MailTip相同的信息。我的问题是

  1. 是否有办法进入MailTip并从中读取信息?

  2. 如果没有,最好的方法是找到联系电子邮件地址是否在组织内部/外部(考虑到性能)

获取收件人的电子邮件地址在Outlook VSTO +阅读邮件提示

Outlook对象模型不提供任何读取MailTips的功能。

尝试使用以下代码:

private string GetSenderSMTPAddress(Outlook.MailItem mail)
{
    string PR_SMTP_ADDRESS =
       @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
    if (mail == null)
    {
        throw new ArgumentNullException();
    }
    if (mail.SenderEmailType == "EX")
    {
       Outlook.AddressEntry sender =
          mail.Sender;
       if (sender != null)
       {
           //Now we have an AddressEntry representing the Sender
           if (sender.AddressEntryUserType ==
               Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry
               || sender.AddressEntryUserType ==                    Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
           {
               //Use the ExchangeUser object PrimarySMTPAddress
               Outlook.ExchangeUser exchUser =
                   sender.GetExchangeUser();
               if (exchUser != null)
               {
                   return exchUser.PrimarySmtpAddress;
               }
               else
               {
                   return null;
               }
           }
           else
           {
               return sender.PropertyAccessor.GetProperty(
                   PR_SMTP_ADDRESS) as string;
           }
       }
       else
       {
           return null;
       }
   }
   else
   {
       return mail.SenderEmailAddress;
   }
}

参见如何:获取邮件发件人的SMTP地址。此外,您可能会发现如何:将基于exchange的电子邮件地址转换为SMTP电子邮件地址的文章很有帮助。