使用outlook迭代联系人属性

时间:2008-10-15 17:21:37

标签: c# .net outlook vsto

我想迭代一个联系人属性,并将包含单词“Number”的那些添加到带有值的列表中,我尝试使用反射,但它不起作用。

以下示例代码

使用System; 使用System.Collections; 使用System.Collections.Generic; 使用System.Reflection; 使用Microsoft.Office.Interop.Outlook;

命名空间DuplicateNumbers {     公共类ContactService     {         public ContactItem联系人{get;私人集; }

    private IDictionary<string,string> phoneNumbers = new Dictionary<string, string>();

    public ContactService(ContactItem contact)
    {
        Contact = contact;
    }

    public IDictionary<string,string> PhoneNumbers
    {
        get
        {
            if(phoneNumbers.Count == 0)
            {
                PopulatePhoneNumbers();
            }
            return phoneNumbers;
        }
    }

    private void PopulatePhoneNumbers()
    {
        _ContactItem ci = Contact as _ContactItem;
        MemberInfo[] members = ci.GetType().FindMembers(MemberTypes.All, BindingFlags.Instance, (m,criteria) => true, null);
        foreach (var info in members)
        {
            if(info.Name.Contains("Number"))
            {
                phoneNumbers.Add(info.Name,info.Value);
            }
            Console.WriteLine(info);
        }
    }
}

}

3 个答案:

答案 0 :(得分:1)

尝试使用MAPI CDO。

这是一个可以帮助您入门的微软网站:How to use CDO to read MAPI Addresses

以下是一些MAPI博客也可以提供帮助:

答案 1 :(得分:0)

原因它不起作用 - 它是一个COM对象。您应该使用CDO空间中的属性。

答案 2 :(得分:0)

这似乎能够访问Outlook.ContactItem属性。 Enumerating Outlook ContactItem properties