2008-12-17 5 views
2

Je dois lire les enregistrements contenant le nom et l'adresse e-mail d'un fichier ou d'une base de données et les ajouter à une liste de distribution Oulook existante (contacts privés, pas GAL).Ajouter de nouveaux enregistrements à la liste de distribution Outlook privée

Je viens de voir des exemples de la lecture de l'OL en utilisant LINQ à DASL que je travaille pour le courrier et les rendez-vous, mais je ne peux pas comprendre comment lister le contenu d'une liste 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(); 
    } 

Une fois Je peux lire les membres dont j'ai besoin pour en ajouter de nouveaux, ce qui est encore plus astucieux. Toute aide serait appréciée.

Répondre

2

Il s'avère que c'est assez facile. Je manque tout simplement l'appel à Resolve que je pensais que c'était que si vous résolvez contre la liste d'adresses globale:

Outlook.Recipient rcp = app.Session.CreateRecipient("Smith, John<[email protected]>"); 
rcp.Resolve(); 
list.AddMember(rcp); 
list.Save(); 

Et je peux créer un itérateur qui utilise la méthode distList.GetMember:

// Wrap DistListItem.GetMembers() comme itérateur

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