Enumerating Outlook ContactItem properties

c#, contactitem, enumeration, outlook, reflection

Solution

you do not need to to define the interfaces manually. Just add a reference to "Microsoft Outlook XX.0 Class Library" to your C# project, and then use code similar to this:

using System;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Outlook.Application olApplication = new Outlook.Application();

            // get nameSpace and logon.
            Outlook.NameSpace olNameSpace = olApplication.GetNamespace("mapi");
            olNameSpace.Logon("Outlook", "", false, true);

            // get the contact items
            Outlook.MAPIFolder _olContacts = olNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
            Outlook.Items olItems = _olContacts.Items;

            foreach (object o in olItems)
            {
                if (o is Outlook.ContactItem)
                {
                    Outlook.ContactItem contact = (Outlook.ContactItem)o;
                    foreach (Outlook.ItemProperty property in contact.ItemProperties)
                    {
                        Console.WriteLine(property.Name + ": " + property.Value.ToString());
                    }
                }
            }
            Console.WriteLine("Press any key");
            Console.ReadKey();
        }
    }
}

Hope this helps.

-- Frank

Problem

I'm trying to enumerate the properties of an Microsoft.Office.Interop.Outlook.ContactItem object (let's call it ci) with this code: ``` System.Reflection.BindingFlags bf = System.Reflection.BindingFlags.Default; foreach (System.Reflection.PropertyInfo pi in ci.GetType().GetProperties(bf)) { Console.WriteLine("Property Info {0}", pi.Name); } ``` I've actually tried several combinations of BindingFlag values, but no properties are ever returned. This is how ContactItem is defined: using System.Runtime.InteropServices; ``` namespace Microsoft.Office.Interop.Outlook { [Guid("00063021-0000-0000-C000-000000000046")] [CoClass(typeof(ContactItemClass))] public interface ContactItem : _ContactItem, ItemEvents_10_Event { } } ``` This is how _ContactItem is defined (I've kept only 3 props for simplicity): ``` using System; using System.Runtime.InteropServices; namespace Microsoft.Office.Interop.Outlook { [TypeLibType(4160)] [Guid("00063021-0000-0000-C000-000000000046")] public interface _ContactItem { [DispId(14848)] string Account { get; set; } [DispId(63511)] Actions Actions { get; } [DispId(14913)] DateTime Anniversary { get; set; } } } ``` Could somebody help me? Thanks in advance Bob

Original source