Pregunta

Puede alguien decirme la forma más sencilla de obtener una lista de contactos de Exchange Server? Estoy usando C #

A partir de lo que he descubierto, servicios web de Exchange sólo existe para Exchange Server 2007 y más allá. Ese sería mi primera opción, pero también me gustaría una alternativa para las versiones anteriores de Exchange (WebDAV o algo así). Directorio de Servicios no es una opción.

¿Fue útil?

Solución

Esto es cómo conseguir que la lista de contactos de su lista de contactos a cambio el uso de sistemas de alerta temprana. No estoy seguro de cómo obtener contactos de la lista mundial, sin embargo, se limitó a la API hace una hora.

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

He omite, la creación del servicio para verbocity, echar un vistazo a la API> servicios web de Exchange para obtener más información.

Otros consejos

En primer lugar, no se olvide de añadir una referencia a la Biblioteca de servicios web de 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]);
    }
}

... y Brett Ryan ya se suministra el código para obtener la lista de contactos local.

El problema con este método de recuperación de la lista de contactos mundial (bueno, uno de ellos al menos) es que la función "ResolveName" devuelve hasta 100 contactos por lo que si su organización tiene más registros que eso, estás en problema. Una solución posible (y la que he implementado) es llevar a cabo una búsqueda separada para cada letra (suponiendo que usted puede verificar que dicha búsqueda siempre devolverá a menos de 100 resultados) y de cadena todas las entradas únicas juntas en una sola lista.

scroll top