Поиск в глобальном списке адресов / книгах

Я разрабатываю приложение, которое позволит пользователю просматривать содержимое папки "Входящие", к которой он имеет доступ. Я с трудом пытаюсь найти способ поиска в глобальном списке адресов, кроме

AddressEntries entries = global.AddressEntries;
AddressEntry entry = entries["search value"];

Это работает, но возвращает только один экземпляр, и это первый найденный экземпляр. Я в основном хочу предоставить список пользователю, если есть несколько результатов.

Во-вторых, я хотел бы иметь возможность просматривать контактную информацию, но когда я использую

ContactItem contact = entry.GetContact();

Он всегда возвращает ноль, я думаю, что это потому, что он смотрит на личный список контактов текущего пользователя

Я предполагаю, что я пытаюсь создать простую версию окна Глобальной адресной книги в Outlook, если это имеет смысл.

В любом случае, если у кого-то есть идеи или рекомендации, я был бы признателен!

Спасибо Патрик

3 ответа

Решение

Вы должны иметь возможность получить глобальный список адресов из текущего профиля, как показано ниже.

Outlook.AddressLists addrLists = Application.Session.AddressLists;
Outlook.AddressList gal = addrLists["Global Address List"];

Затем вы можете перечислить и отобразить членов этого AddressList,

Есть другой способ сделать это, описанный на MSDN здесь.

Как: перечислить записи в глобальном списке адресов

string[] names;
Outlook.AddressLists addrLists = Application.Session.AddressLists; 
Outlook.AddressList gal = addrLists["Global Address List"];

//for a distrubution list do this...
Outlook.AddressEntry entry = gal.AddressEntries["distribution list"];
Outlook.ExchangeDistributionList exchDL = entry.GetExchangeDistributionList();
Outlook.AddressEntries addrEntries = exchDL.GetExchangeDistributionListMembers();

names = new string[addrEntries.Count];

for (int i = 0; i < addrEntries.Count; i++)
{
    Outlook.AddressEntry exchDLMember = addrEntries[i];
    names[i] = exchDLMember.Name;
}

return names;

//for an individual you could do something like this...
Outlook.AddressEntry entry = gal.AddressEntries["contact nickname"];

Outlook.ContactItem contact = entry.GetContact();
string name = contact.NickName;
string email = contact.Email1Address;
  1. Установить пакет Outlook Interop Install-Package Microsoft.Office.Interop.Outlook
  2. Вот код (взят из MSDN)
      using Microsoft.Office.Interop.Outlook;

var application = new Application();
            AddressList gal = application.Session.GetGlobalAddressList();
            if (gal != null)
            {
                for (int i = 1; i < gal.AddressEntries.Count - 1; i++)
                {
                    AddressEntry addrEntry = gal.AddressEntries[i];

                    if (addrEntry.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry || 
                        addrEntry.AddressEntryUserType == OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
                    {
                        ExchangeUser exchUser = addrEntry.GetExchangeUser();
                        Console.WriteLine($"{ exchUser.Name } { exchUser.PrimarySmtpAddress }");
                    }
                    if (addrEntry.AddressEntryUserType == OlAddressEntryUserType.olExchangeDistributionListAddressEntry)
                    {
                        ExchangeDistributionList exchDL = addrEntry.GetExchangeDistributionList();
                        Console.WriteLine($"{ exchDL.Name } { exchDL.PrimarySmtpAddress }");
                    }
                }
            }
Другие вопросы по тегам