Поделиться через


Получение SMTP-адреса отправителя почтового элемента

В этом примере выполняется получение SMTP-адреса отправителя для почтового элемента.

Пример

Чтобы определить SMTP-адрес полученного почтового элемента, используйте свойство SenderEmailAddress объекта MailItem. Однако если отправитель сообщения находится внутри организации, свойство SenderEmailAddress не возвращает SMTP-адрес. В этом случае необходимо использовать объект PropertyAccessor.

В следующем примере кода метод GetSenderSMTPAddress использует объект PropertyAccessor для получения значений, которые не предоставляются явно в объектной модели приложения Outlook. Метод GetSenderSMTPAddress получает объект MailItem. Если свойство SenderEmailType полученного объекта MailItem имеет значение "EX", отправитель сообщения размещается на сервере Exchange в организации. Метод GetSenderSMTPAddress использует свойство Sender объекта MailItem для получения отправителя, представленного объектом AddressEntry. Если объект AddressEntry представляет пользователя Exchange, в этом примере вызывается метод GetExchangeUser(), который возвращает объект ExchangeUser объекта AddressEntry. После этого метод GetSenderSMTPAddress использует свойство PrimarySmtpAddress объекта ExchangeUser, которое возвращает SMTP-адрес отправителя. Если объект AddressEntry для отправителя не представляет объект ExchangeUser , для возврата SMTP-адреса отправителя используется метод GetProperty(String) объекта PropertyAccessor с PR_SMTP_ADDRESS (PidTagSmtpAddress).

Если вы используете Visual Studio для тестирования этого примера кода, сначала добавьте ссылку на компонент Microsoft Outlook 15.0 Object Library и задайте переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция using не должна находиться непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующей строке кода показано, как выполнить импорт и назначение в C#.

using Outlook = Microsoft.Office.Interop.Outlook;
private string GetSenderSMTPAddress(Outlook.MailItem mail)
{
    string PR_SMTP_ADDRESS =
        @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
    if (mail == null)
    {
        throw new ArgumentNullException();
    }
    if (mail.SenderEmailType == "EX")
    {
        Outlook.AddressEntry sender =
            mail.Sender;
        if (sender != null)
        {
            //Now we have an AddressEntry representing the Sender
            if (sender.AddressEntryUserType ==
                Outlook.OlAddressEntryUserType.
                olExchangeUserAddressEntry
                || sender.AddressEntryUserType ==
                Outlook.OlAddressEntryUserType.
                olExchangeRemoteUserAddressEntry)
            {
                //Use the ExchangeUser object PrimarySMTPAddress
                Outlook.ExchangeUser exchUser =
                    sender.GetExchangeUser();
                if (exchUser != null)
                {
                    return exchUser.PrimarySmtpAddress;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return sender.PropertyAccessor.GetProperty(
                    PR_SMTP_ADDRESS) as string;
            }
        }
        else
        {
            return null;
        }
    }
    else
    {
        return mail.SenderEmailAddress;
    }
}

См. также