Question

I want to import contacts from Outllok via Mapi. First step with standard contact is no problem:

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

In a second step I additionally want to import shared contacts. Only thing I found was using

OpenSharedItem(sharedContacts.vcf)

but I don't know the name of the file (shared item) I want to open. Does someone know how to access shared contacts and can help me out?

Tobi


Update:

Thanks for the hint with the vcf-Files. But where do I find them?


Update2:

I played around with OutlookSpy. I got access to the folder with shared contacts, but only by knowing the id (which is of course different for other users):

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

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

How do I get access to the folder without knowing the id?

Was it helpful?

Solution 2

Well the solution to the question as it is asked in the title is almost simple. You just need to call:

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

Because this does not solve my problem I will ask another question!

OTHER TIPS

You will need to either explicitly parse the vCard files or you can use Redemption - it allows to import vCard files using RDOContactItem.Import - http://www.dimastr.com/redemption/RDOMail.htm#methods

I have done some programming to get contact from outlook. I am giving you some example code to help you up with this ..It is not excatly want you want but i think this will help you with your problem...

  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; 

} 
     var outlook = new Microsoft.Office.Interop.Outlook.Application();
                NameSpace mapiNamespace = outlook.Application.GetNamespace("MAPI");

                foreach (Store store in mapiNamespace.Stores)
                {
                    try
                    {
                        var folder = store.GetRootFolder();

                        foreach(MAPIFolder subfolder in folder.Folders)
                        {
                            if ( subfolder.Name == "Inbox")
                            {
                                foreach(dynamic message in subfolder.Items.Restrict("[MessageClass]='IPM.Sharing'"))
                                {
                                        if (message.Class == 104)//SharingItem
                                        {
                                            Folder sharedFolder = message.OpenSharedFolder();
                                            if (sharedFolder.DefaultMessageClass == "IPM.Contact")
                                            {
                                               //this is your folder
                                            }
                                        }
                                }
                            }
                        }
                    }
                    catch (System.Exception ex)
                    {
                        continue;
                    }
                }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top