【问题标题】:how to obtain email address from ews contacts如何从 ews 联系人获取电子邮件地址
【发布时间】:2015-03-03 18:15:32
【问题描述】:

我使用此代码从 Outlook 获取联系人:

        foreach (var v in svc.FindItems(WellKnownFolderName.Contacts,
                                        new ItemView(20)))
        {
            Contact contact = v as Contact;
            ContactGroup contactGroup = v as ContactGroup;

            if (contact != null)
            {   
                 Console.WriteLine("Contact: {0} <{1}>",
                 contact.DisplayName,
                 contact.EmailAddresses[EmailAddressKey.EmailAddress1]);
            }
        }

我需要获取电子邮件方向 (xxx@xxx.xx),但我在电子邮件地址字段中得到了这个:

"/o=companyname/ou=FIRST ADMINISTRATIVE GROUP/cn=RECIPIENTS/cn=username"

【问题讨论】:

    标签: c# contacts exchangewebservices


    【解决方案1】:

    您的“电子邮件地址”采用 Exchange 专有名称的形式。这不是 SMTP 地址。

    获取 SMTP 电子邮件地址:

    简单代码示例

    NameResolutionCollection nd = service.ResolveName(contact.EmailAddresses[EmailAddressKey.EmailAddress1].Address);
           foreach (NameResolution nm in nd)
           {
               if (nm.Mailbox.RoutingType == "SMTP")
               {
                   //Console.WriteLine(nm.Mailbox.Address);
                   emailAddress1 = nm.Mailbox.Address;
               }
           }
    

    Improved code

    EmailAddress email;
    if (contact.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1, out email))
    {
        person.Email = GetResolvedEmailAddress(email.Address, svc);
    }
    
    private static Dictionary<String, String> ResolvedEmailAddressCache = new Dictionary<String, String>();
        private static String GetResolvedEmailAddress(string address, ExchangeService svc)
        {
            if (ResolvedEmailAddressCache.ContainsKey(address))
                return ResolvedEmailAddressCache[address];
    
            NameResolutionCollection nd = svc.ResolveName(address);
            foreach (NameResolution nm in nd)
            {
                if (nm.Mailbox.RoutingType == "SMTP")
                {
                    ResolvedEmailAddressCache.Add(address, nm.Mailbox.Address);
                    return nm.Mailbox.Address;
                }
            }
    
            ResolvedEmailAddressCache.Add(address, address);
            return address;
        }
    

    【讨论】:

      【解决方案2】:

      你也可以通过调用Load()方法来获取它,这似乎表现更好。 见https://social.msdn.microsoft.com/Forums/sqlserver/en-US/8760c6a5-09c6-438a-a70a-c4063645cc76/exchange-web-service-api-contact-email-address

      调用 Load 为我修复了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多