Прежде всего, не забудьте добавить ссылку на библиотеку веб-служб Microsoft Exchange.
private static void ConnectToExchangeService()
{
service = new ExchangeService();
service.Credentials = new WebCredentials(USERNAME, PASSWORD, DOMAIN_NAME);
service.AutodiscoverUrl(USER_ADDRESS);
}
private static void ListGlobalContacts(ExchangeService service)
{
/* passing true as the third parameter to "ResolveName" is important to
make sure you get the contact details as well as the mailbox details */
NameResolutionCollection searchResult = service.ResolveName(NAME_YOURE_LOOKING_FOR, ResolveNameSearchLocation.DirectoryOnly, true);
foreach (NameResolution resolution in searchResult )
{
Console.WriteLine("name is " + resolution.Contact.DisplayName);
Console.WriteLine("address is " + resolution.Mailbox.Address);
Console.WriteLine("business phone is " + resolution.Contact.PhoneNumbers[PhoneNumberKey.BusinessPhone]);
Console.WriteLine("mobile phone is " + resolution.Contact.PhoneNumbers[PhoneNumberKey.MobilePhone]);
}
}
... и Бретт Райан уже предоставил код для получения списка местных контактов.
Проблема с этим методом получения глобального списка контактов (ну, по крайней мере, одного из них) состоит в том, что функция ResolveName возвращает до 100 контактов, так что если ваша организация имеет больше записей, чем вы, вы находитесь в беда. Один из возможных обходных путей (и тот, который я реализовал) заключается в проведении отдельного поиска для каждой буквы (при условии, что вы можете проверить, что такой поиск всегда будет возвращать менее 100 результатов) и объединения всех уникальных записей в один список.