Domanda

ho bisogno di leggere i record che contengono il nome ed e-mail da un file o database e aggiungerli a una lista di distribuzione Oulook esistente (dai contatti privati, non dal GAL).

Ho appena visto esempi di lettura da OL utilizzando LINQ to DASL che ho a lavorare per la posta e gli appuntamenti, ma non riesco a capire come elencare il contenuto di una lista di 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 volta che posso leggere i membri ho bisogno di essere in grado di aggiungerne di nuovi, che è ancora più trucco. Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

scopre che è abbastanza facile. Stavo semplicemente mancava la chiamata a risolvere, come ho pensato che era solo se si stesse risolvendo contro il GAL:

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

E posso creare un iteratore che utilizza il metodo distList.GetMember:

// Wrap DistListItem.GetMembers () come un iteratore

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);
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top