Search code examples
c#reflectionoutlookenumerationcontactitem

Enumerating Outlook ContactItem properties


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


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