【问题标题】:Get email address of a recipient in Outlook VSTO + Read MailTips在 Outlook VSTO 中获取收件人的电子邮件地址 + 阅读邮件提示
【发布时间】:2017-01-08 03:15:19
【问题描述】:

我目前在使用 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. 有什么方法可以进入邮件提示并从中读取信息?

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

【问题讨论】:

    标签: c# outlook vsto exchange-server


    【解决方案1】:

    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;
       }
    }
    

    How to: Get the SMTP Address of the Sender of a Mail Item。此外,您可能会发现 HowTo: Convert Exchange-based email address into SMTP email address 文章很有帮助。

    【讨论】:

    • 谢谢尤金。我今天会试试。
    • 我已尝试实施相同的方法,但遇到了其他问题。为同一 link 发布了不同的问题。
    【解决方案2】:

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

    如果使用 Redemption 是一个选项,它会公开返回 RDOMailTips 对象的 RDOAddressEntry.GetMailtips 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2012-09-20
      • 2021-03-08
      相关资源
      最近更新 更多