C# 如何从ews联系人获取电子邮件地址
im使用以下代码从outlook获取联系人: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
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;
}