VSTO Outlook Add-ins – Getting Contacts from Distribution Lists
A while ago I was tasked with creating an Outlook Add-in that enables a user to opt-in their contacts for synchronization with a KMBS product named Page Scope Enterprise Suite (PSES). Part of this add-in is to offer a panel at the bottom of every contact so they can be opt-ed in for synchronization like so:
As you can see this isn’t very fancy – two check-boxes to control if you want the email and/or fax addresses sent along to PSES. Naturally, there is also an option to opt-in distribution lists:
This is of course where the fun began. In my personal opinion distribution lists were not properly implemented, or rather updated from earlier versions of Outlook. For instance, take a close look at the image above. Notice how a “fax” address is listed under the “E-mail” column? Do you also notice how it has the @ symbol? What in the world is going on here?
Another issue is how the ContactItem relates to the Recipient – or rather how you can obtain the actual contact from the item in the distribution list. Based on documentation we should be able to use the GetContact() method found a little ways down on the Recipient class.
Outlook.Recipient.AddressEntry.GetContact()
Sadly however, this doesn’t work (for me at-least) no matter what I did. So after a decent amount of trial and error I was able to determine that a Recipient’s EntryID actually contains the the Contact’s EntryID.
For example:
Recipient.EntryID = "abcd-1234"; Contact.EntryID = "1234";
This is simplified of course as real ID’s are quite long. So to actually get the contact we should do this:
Outlook.Recipient r = DistListItem.GetMember(1); string rid = r.EntryID; rid = rid.Substring(rid.Length - 48); Outlook.ContactItem c = Application.Session.GetItemFromID(rid, null) as Outlook.ContactItem;
Hopefully someone else will find this mess useful as I couldn’t find anything a year ago about these oddities and issues.

