Как получить список контактов с Exchange Server? - PullRequest
14 голосов
/ 15 января 2010

Может кто-нибудь сказать мне самый простой способ получить список контактов из Exchange Server? Я использую C #

Из того, что я узнал, Веб-службы Exchange существует только для Exchange Server 2007 и более поздних версий. Это был бы мой первый вариант, но я бы также хотел использовать альтернативу для предыдущих версий Exchange (WebDav или что-то в этом роде). Службы каталогов не являются опцией.

Ответы [ 2 ]

12 голосов
/ 09 февраля 2010

Это способ получения списка контактов из списка контактов в обмен на EWS. Я не уверен, как получить контакты из глобального списка, только посмотрел на API час назад.

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

        //v.Load(); // Turns out you don't need to load for basic props.
        if (contact != null) {
            Console.WriteLine("Contact: {0} <{1}>",
                contact.DisplayName,
                contact.EmailAddresses[EmailAddressKey.EmailAddress1]);
        } else if (contactGroup != null) {
            Console.WriteLine("Contact Group: {0}", contactGroup.DisplayName);
            switch (svc.RequestedServerVersion) {
                case ExchangeVersion.Exchange2007_SP1:
                    ExpandGroupResults groupResults
                        = svc.ExpandGroup((contactGroup.Id));
                    foreach (var member in groupResults) {
                        Console.WriteLine("+ {0} <{1}>",
                            member.Name, member.Address);
                    }
                    break;
                case ExchangeVersion.Exchange2010:
                    foreach (GroupMember member in contactGroup.Members) {
                        Console.WriteLine("+ {0} <{1}>",
                        member.AddressInformation.Name,
                        member.AddressInformation.Address);
                    }
                    break;
                default:
                    Console.WriteLine(
                        "** Unknown Server Version: {0}",
                        svc.RequestedServerVersion);
                    break;
            }
        } else {
            Console.WriteLine("Unknown contact type: {0} - {1}",
                contact.GetType(), v.Subject);
        }
    }
}

Я пропустил создание службы для многословия, посмотрите API веб-служб Exchange для получения дополнительной информации.

1 голос
/ 02 июня 2016

Прежде всего, не забудьте добавить ссылку на библиотеку веб-служб 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 результатов) и объединения всех уникальных записей в один список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...