繁体   English   中英

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

[英]Get email address of a recipient in Outlook VSTO + Read MailTips

我目前在使用VSTO为2010年创建的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已在“新电子邮件”窗口上显示与邮件提示相同的信息。 所以我的问题是

  1. 有没有办法利用MailTip并从中读取信息?

  2. 如果否,那么查找联系电子邮件地址是否在组织内部/外部的最佳方法是什么(考虑绩效)

Outlook对象模型不提供任何内容来读取邮件提示。

尝试改用以下代码:

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电子邮件地址”一文很有帮助。

只能使用EWS访问邮件提示-请参阅https://msdn.microsoft.com/zh-cn/library/office/dd877060%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396

如果使用“兑换”是一个选项,则它公开RDOAddressEntry 返回RDOMailTips对象的GetMailtips方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM