Получение 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;
}
}