2012-11-02 12 views
8

Desidero importare i contatti da Outllok tramite Mapi. Primo passo con contatto standard non è un problema:Outlook Mapi access contatti condivisi

MAPIFolder contactObjects = 
outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts); 
foreach (ContactItem contactObject in contactObjects.Items) { 
    ... import contact ... 
} 

In una seconda fase che inoltre voglio importare i contatti condivisi. L'unica cosa che ho trovato stava usando

OpenSharedItem(sharedContacts.vcf) 

ma non so il nome del file (elemento condiviso) voglio aprire. Qualcuno sa come accedere ai contatti condivisi e può darmi una mano?

Tobi


Aggiornamento:

Grazie per il suggerimento con il VCF-Files. Ma dove li trovo?


Update2:

Ho suonato in giro con OutlookSpy. Ho avuto accesso alla cartella con i contatti condivisi, ma solo conoscendo l'id (che è ovviamente diverso per gli altri utenti):

var ns = outlookObj.GetNamespace("MAPI"); 
var flr = ns.GetFolderFromID("00000000176A90DED92CE6439C1CB89AFE3668F90100D1AD8F66B576B54FB731302D9BB9F6C40007E4BAC5020000"); 

foreach (var contactObject in flr.Items) { 
     ... 
} 

Come faccio ad avere accesso alla cartella senza conoscere l'id?

risposta

1

Beh, la soluzione della questione come è chiesto nel titolo è quasi semplice. Hai solo bisogno di chiamare:

Recipient recip = Application.Session.CreateRecipient("Firstname Lastname"); 
MAPIFolder sharedContactFolder = Application.Session.GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderContacts); 

Poiché questo non risolve il mio problema io pregherò another question!

0

ho fatto alcuni di programmazione per ottenere contatti da Outlook. io vi do un po 'di codice di esempio per aiutarvi con questa ..è non excatly vuole si vuole, ma penso che questo vi aiuterà con il tuo problema ...

using System.Collections.Generic; 

// ... 

private List<Outlook.ContactItem> GetListOfContacts(Outlook._Application OutlookApp) 

    { 
    List<Outlook.ContactItem> contItemLst = null; 
    Outlook.Items folderItems =null; 
    Outlook.MAPIFolder mapiFoldSuggestedConts = null; 
    Outlook.NameSpace nameSpc = null; 
    Outlook.MAPIFolder mapiFoldrConts = null; 
    object itemObj = null; 

    try 
    { 

     contItemLst = new List<Outlook.ContactItem>(); 
     nameSpc = OutlookApp.GetNamespace("MAPI"); 
     // getting items from the Contacts folder in Outlook 
     mapiFoldrConts = 
      nameSpc.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 

     folderItems = mapiFoldrConts.Items; 
     for (int i = 1; folderItems.Count >= i; i++) 
     { 

      itemObj = folderItems[i]; 
      if (itemObj is Outlook.ContactItem) 
       contItemLst.Add(itemObj as Outlook.ContactItem); 
      else 
       Marshal.ReleaseComObject(itemObj); 
     } 

     Marshal.ReleaseComObject(folderItems); 
     folderItems = null; 
     // getting items from the Suggested Contacts folder in Outlook 
     mapiFoldSuggestedConts = nameSpc.GetDefaultFolder( 

      Outlook.OlDefaultFolders.olFolderSuggestedContacts); 

     folderItems = mapiFoldSuggestedConts.Items; 

     for (int i = 1; folderItems.Count >= i; i++) 
     { 

      itemObj = folderItems[i]; 
      if (itemObj is Outlook.ContactItem) 
       contItemLst.Add(itemObj as Outlook.ContactItem); 

      else 
       Marshal.ReleaseComObject(itemObj); 
     } 
    } 

    catch (Exception ex) 
    { 
     System.Windows.Forms.MessageBox.Show(ex.Message); 
    } 

    finally 
    { 

     if (folderItems != null) 
      Marshal.ReleaseComObject(folderItems); 
     if (mapiFoldrConts != null) 
      Marshal.ReleaseComObject(mapiFoldrConts); 
     if (mapiFoldSuggestedConts != null) 
      Marshal.ReleaseComObject(mapiFoldSuggestedConts); 
     if (nameSpc != null) Marshal.ReleaseComObject(nameSpc); 
    } 

    return contItemLst; 

} 
+0

Grazie per il codice, ma lo faccio già. Non è un problema importare contatti standard o consigliati, ma leggere i contatti condivisi. – Tobias