Поиск общедоступной папки контактов Outlook из C # - PullRequest
1 голос
/ 09 марта 2011

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

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

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

Cheers

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Я закончил этим:

            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 голос
/ 17 февраля 2012

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