Question

Quelqu'un peut-il me dire la façon la plus simple d'obtenir une liste de contacts à partir d'Exchange Server? J'utilise C #

D'après ce que j'ai découvert, Services Web Exchange existe uniquement pour Exchange Server 2007 et au-delà. Ce serait ma première option, mais je voudrais aussi que une alternative pour les versions précédentes d'Exchange (WebDav ou quelque chose). Directory Services est pas une option.

Était-ce utile?

La solution

Voici comment obtenir la liste des contacts de votre liste de contacts en échange utilisant SAP. Je ne suis pas sûr de savoir comment obtenir des contacts de la liste globale encore, seulement regardé l'API il y a une heure.

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

J'ai ommited la création du service pour verbocity, jetez un oeil à la page API de services Web Exchange pour plus d'informations.

Autres conseils

Tout d'abord, ne pas oublier d'ajouter une référence à la bibliothèque Webservices 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]);
    }
}

... et Brett Ryan déjà fourni le code pour obtenir la liste des contacts locaux.

Le problème avec cette méthode de récupération de la liste globale de contacts (bien, l'un d'entre eux au moins) est que la fonction « ResolveName » retourne jusqu'à 100 contacts de sorte que si votre organisation a plus d'enregistrements que cela, vous êtes en difficulté. Une solution possible (et celui que je mis en œuvre) est d'effectuer une recherche séparée pour chaque lettre (en supposant que vous pouvez vérifier qu'une telle recherche retournera toujours moins de 100 résultats) et chaîne toutes les entrées uniques en une seule liste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top