C# 如何从ews联系人获取电子邮件地址

C# 如何从ews联系人获取电子邮件地址,c#,contacts,exchangewebservices,C#,Contacts,Exchangewebservices,im使用以下代码从outlook获取联系人: foreach (var v in svc.FindItems(WellKnownFolderName.Contacts, new ItemView(20))) { Contact contact = v as Contact; ContactGroup contactGroup = v as

im使用以下代码从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]);
            }
        }
foreach(svc.FindItems(WellKnownFolderName.Contacts)中的变量v,
新项目视图(20))
{
触点=v作为触点;
ContactGroup ContactGroup=v作为ContactGroup;
如果(联系人!=null)
{   
Console.WriteLine(“联系人:{0}”),
contact.DisplayName,
contact.emailAddresss[EmailAddressKey.EmailAddress1]);
}
}
我需要得到电子邮件地址(xxx@xxx.xx)但我在“电子邮件地址”字段中看到:

“/o=companyname/ou=第一个管理组/cn=收件人/cn=用户名”


您的“电子邮件地址”采用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;
           }
       }

EmailAddress-email;
if(contact.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1,out-email))
{
person.Email=GetResolvedEmailAddress(Email.Address,svc);
}
私有静态字典ResolvedMailAddressCache=新字典();
私有静态字符串GetResolvedEmailAddress(字符串地址,ExchangeService svc)
{
if(ResolvedMailAddressCache.ContainsKey(地址))
返回ResolvedMailAddressCache[address];
NameResolutionCollection nd=svc.ResolveName(地址);
foreach(名称分辨率为nm,单位为nd)
{
如果(nm.Mailbox.RoutingType==“SMTP”)
{
ResolvedEmailAddressCache.Add(地址,nm.Mailbox.address);
返回nm.Mailbox.Address;
}
}
Add(地址,地址);
回信地址;
}

您也可以通过调用Load()方法来获得它,这似乎性能更好。 看

呼叫Load为我修复了它

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