Поиск в глобальном списке адресов / книгах
Я разрабатываю приложение, которое позволит пользователю просматривать содержимое папки "Входящие", к которой он имеет доступ. Я с трудом пытаюсь найти способ поиска в глобальном списке адресов, кроме
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;
- Установить пакет Outlook Interop
Install-Package Microsoft.Office.Interop.Outlook
- Вот код (взят из 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 }");
}
}
}