Получить контактные данные Outlook из объекта DistListItem - PullRequest
0 голосов
/ 02 ноября 2018

В Outlook получатели могут быть добавлены в список рассылки несколькими способами, либо в виде простой комбинации имя / адрес, либо в качестве внешнего контакта. Когда ContactItem добавляется в список рассылки, последующие изменения адреса электронной почты контакта не отражаются в списке автоматически - вам нужно открыть список и вручную нажать «обновить участников». Я хотел бы сделать это программно. Однако объект DistListItem не предоставляет метод update(), поэтому требуется другой способ.

Для этого я пытаюсь вернуться к исходному ContactItem от члена DistListItem, который является объектом Recipient. Я думал, что смогу использовать что-то вроде DistListItem.GetMember(i).AddressEntry.GetContact(), но это только исключение. Есть идеи, что я могу делать не так? Вот часть моего кода (это часть дополнения VSTO):

Outlook.Explorer currentExplorer = Application.ActiveExplorer();
Outlook.MAPIFolder currentFolder = currentExplorer.CurrentFolder;
foreach (Object item in currentFolder.Items.OfType<Outlook.DistListItem>())
{
   Outlook.DistListItem DistList = (Outlook.DistListItem)item;
   for (int i = 1; i <= DistList.MemberCount; i++)
   {
      Outlook.Recipient recipient = DistList.GetMember(i);

      // this will throw an exception, saying the object can't be found:
      Outlook.ContactItem contact = recipient.AddressEntry.GetContact();
   }
}

1 Ответ

0 голосов
/ 10 ноября 2018

Копия моего ответа на ваш вопрос на форуме MSDN (https://social.msdn.microsoft.com/Forums/en-US/26ffa714-1213-46cd-953c-53c6e26cb992/get-outlook-contactitems-from-a-distlistitem-object?forum=outlookdev)

DistListItem.GetMember возвращает только одноразовую запись адреса: DistListItem хранит как одноразовые (имя и адрес встроены в идентификатор записи), так и реальные идентификаторы записи (указывая на исходный объект AB). Теоретически вы можете прочитать и проанализировать свойства PT_MV_BINARY, в которых хранятся идентификаторы записей - DistributionListMembers (имя DASL http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80551102) и DistributionListOneOffMembers (имя DASL http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80541102) свойства MAPI - взгляните на существующий DL с OutlookSpy (нажмите кнопку IMessage).

Если используется Исключение является опцией, его версия объекта RDODistListItem предоставляет коллекции Members и OneOffMembers, а также метод AddContact.

...