Pregunta

Tengo que leer los registros que contengan el nombre y el correo electrónico desde un archivo o base de datos y añadirlos a una lista de distribución Oulook existentes (de los contactos privados, no del GAL).

acabo de ver ejemplos de la lectura desde OL usando LINQ a DASL que he trabajando para el correo y las citas, pero no puedo encontrar la manera de mostrar el contenido de una lista dist:

private static void GetContacts()
    {
         Outlook.Application app = new Outlook.Application();
         Outlook.Folder folder = (Outlook.Folder)app.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
 var distLists = from item in folder.Items.AsQueryable<MyDistList>()
                 where item.DLName == "My Dist List"
                 select item.Item;

        var builder = new StringBuilder();

        foreach (var list in distLists)
        {
            builder.AppendLine(list.DLName);
            foreach (var item in list.Members)
            {
            // can't figure out how to iterate through the members here
            // compiler says Object doesn't have GeNumerator...
            }
        }

        Console.WriteLine(builder.ToString());
        Console.ReadLine();
    }

Una vez que puedo leer los miembros que necesito para ser capaz de añadir otros nuevos que es aún más truco. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Resulta que es bastante fácil. Simplemente estaba perdiendo la llamada a resolver lo que pensaba que era sólo si se resolvían en contra del GAL:

Outlook.Recipient rcp = app.Session.CreateRecipient("Smith, John<j.smith@test.com>");
rcp.Resolve();
list.AddMember(rcp);
list.Save();

Y puedo crear un iterador que utiliza el método distList.GetMember:

// Wrap DistListItem.GetMembers () como un iterador

public static class DistListItemExtensions
{
    public static IEnumerable<Outlook.Recipient> Recipients(this Outlook.DistListItem distributionList)
    {
        for (int i = 1; i <= distributionList.MemberCount; i++)
        {
            yield return distributionList.GetMember(i);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top