Попытка получить SMTP-адреса от всех получателей AppointmentItem - PullRequest
0 голосов
/ 13 октября 2018

Я повторяю все AppointmentItem.Recipients.Для каждого получателя я использую следующий служебный метод для получения получателей «нормального» SMTP-адреса электронной почты:

для этого я использовал сообщение из stackoverflow: Получение адреса электронной почты из объекта получателя

    public static string GetSmtpAddress(Outlook.AddressEntry addressEntry)
    {
        String smtpAddress;

        if (addressEntry.Type == "EX")
        {
            if (addressEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry
                 || addressEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
            {
                Outlook.ExchangeUser user = addressEntry.GetExchangeUser();
                smtpAddress = user != null ? user.PrimarySmtpAddress : null;
            }
            else if (addressEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olOutlookContactAddressEntry)
            {
                //returns the actual contact but it has 3 email properties (Email1Address, Email2Address, Email3Address). 
                //How to identify which email has the user selected

                Outlook.ContactItem cont = addressEntry.GetContact();
                String OABID = addressEntry.ID;
                String typ = OABID.Substring(29 * 2, 2);
                if (typ=="00")
                {
                    smtpAddress = cont.Email1Address; <!-- Strange Emailadress
                }else if (typ=="01")
                {
                    smtpAddress = cont.Email1Address;
                } else
                {
                    smtpAddress = cont.Email2Address;
                }
            } else
            {
                smtpAddress = "";
            }
        }
        else if (addressEntry.Type == "SMTP")
        {
            smtpAddress = addressEntry.Address;
        }
        else
        {
            smtpAddress = "";
        }
        return smtpAddress;
    }

Строка, помеченная <- Strage Email, возвращает странно выглядящий адрес электронной почты: она выглядит как / o = Exchange xxxxx что-то xxxx .. В самом конце она также содержит адрес smtp.</p>

Я ищу 100% надежную служебную функцию, которая извлекает правильный SMTP-адрес независимо от типа адреса получателя, пользователя Exchange, пользователя адресной книги или чего-либо еще.Любая помощь очень ценится.

С наилучшими пожеланиями Ханнес

1 Ответ

0 голосов
/ 13 октября 2018

Если запись GAL больше не существует, все ставки отключены.Прежде чем даже коснуться Recipient.AddressEntry, проверьте, доступен ли SMTP-адрес в таблице получателей - используйте Recipient.PropertyAccessor.GetProperty, чтобы прочитать свойство PR_SMTP_ADDRESS (имя DASL "http://schemas.microsoft.com/mapi/proptag/0x39FE001F").Если его нет, прочитайте свойство PR_ADDRTYPE ("http://schemas.microsoft.com/mapi/proptag/0x3002001F") - это эквивалентно свойству Type объекта AddressEntry, который, к сожалению, объект Recipient не предоставляет.Если это «SMTP», просто используйте свойство Recipient.Address.И только если это не так, используйте указанную выше функцию, для которой необходимо Recipient.AddressEntry.

. Посмотрите на встречу с помощью OutlookSpy (нажимает кнопку kIMessage, перейдите на вкладку GetRecipeintTable), чтобы проверитьесли свойство PR_SMTP_`ADDRESS доступно

...