从C#搜索公共Outlook联系人文件夹

时间:2011-03-09 16:20:31

标签: c# outlook contacts

我们在Outlook中有一个名为Global Contacts的大型公共联系人文件夹,我希望能够搜索它并返回一些符合特定条件的结果,理想情况是通配符样式。

E.g。如果有人在“名称”文本框中输入“je”,它将返回名称中包含“je”的所有联系人。这可以作为AND与公司名称文本框耦合。

我见过的大多数例子都是在VB中,或者是关注这个形成一个Web应用程序 - 我正在做一个winforms应用程序,每台机器都安装了Outlook 2002(是的,我知道,更新很长时间)过期)。

有人能指出我正确的方向吗?有些代码可以作为一个很好的起点。

干杯

2 个答案:

答案 0 :(得分:2)

我最终这样做了:

            Microsoft.Office.Interop.Outlook._Application objOutlook; //declare Outlook application
            objOutlook = new Microsoft.Office.Interop.Outlook.Application(); //create it
            Microsoft.Office.Interop.Outlook._NameSpace objNS = objOutlook.Session; //create new session
            Microsoft.Office.Interop.Outlook.MAPIFolder oAllPublicFolders; //what it says on the tin
            Microsoft.Office.Interop.Outlook.MAPIFolder oPublicFolders; // as above
            Microsoft.Office.Interop.Outlook.MAPIFolder objContacts; //as above
            Microsoft.Office.Interop.Outlook.Items itmsFiltered; //the filtered items list
            oPublicFolders = objNS.Folders["Public Folders"];
            oAllPublicFolders = oPublicFolders.Folders["All Public Folders"];
            objContacts = oAllPublicFolders.Folders["Global Contacts"];

            itmsFiltered = objContacts.Items.Restrict(strFilter);//restrict the search to our filter terms

然后只需循环遍历itmsFiltered将其添加到ObjectListView。希望这对那些希望做同样事情的其他人有用 - 我花了一段时间从各种来源一起拼凑这些。

答案 1 :(得分:1)

找到联系人文件夹,您可以迭代olFolderContacts项。这是代码

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

namespace RyanCore
{
    public class Loader
    {
        public static ContactsViewModel LoadModel(Application objOutlook)
        {
            var viewModel = new ContactsViewModel();

            MAPIFolder fldContacts = objOutlook.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
            foreach (object obj in fldContacts.Items)
            {
                if (obj is _ContactItem)
                {
                    var contact = (_ContactItem) obj;
                    viewModel.Contacts.Add(new Contact(contact.FirstName + " " + contact.LastName, contact.Email1Address));
                }
                else if (obj is DistListItem)
                {
                    var distListItem = (DistListItem) obj;
                    var contactGroup = new ContactGroup(distListItem.Subject);

                    viewModel.Groups.Add(contactGroup);
                    for (Int32 i = 1; i <= distListItem.MemberCount; i++)
                    {
                        Recipient subMember = distListItem.GetMember(i);
                        contactGroup.Contacts.Add(new Contact(subMember.Name, subMember.AddressEntry.Address));
                    }
                }
            }
            return viewModel;
        }
    }
}