Поиск общедоступной папки контактов Outlook из C#

У нас есть большая папка общедоступных контактов в Outlook, которая называется Глобальные контакты, и я хотел бы иметь возможность выполнять поиск по ней и возвращать ряд результатов, которые соответствуют определенным критериям, в идеале в стиле подстановочных знаков.

Например, если кто-то введет "je" в текстовое поле "имя", он вернет все контакты, имена которых содержат "je". Это может быть связано как AND с текстовым полем названия компании.

Большинство примеров, которые я видел, либо в VB, либо связаны с созданием этой формы веб-приложения - я создаю приложение winforms, и на каждой машине установлен Outlook 2002 (да, я знаю, обновление уже давно).

Может кто-то указать мне верное направление? Какой-то код был бы хорош для начала.

ура

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. Надеюсь, это пригодится кому-то, кто хочет сделать то же самое - мне понадобилось время, чтобы собрать это из разных источников.

Чтобы найти папку контактов, вы можете перебрать элементы 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;
        }
    }
}
Другие вопросы по тегам