Способ получения адреса отправителя, рассмотренный выше, может вызывать неудобство, связанное с тем, что Outlook запрашивает у пользователя разрешение на доступ к адресной информации. Особенно критично это может быть, например, при пакетной обработке, когда пользователя нет и соответственно он не может подтвердить "10-минутный доступ". Либо длительность сложной обработки может превышать лимит "10 минут".
Один из способов избежать необходимости подтверждения доступа состоит в использовании библиотеки Redemption, которая доступна для скачивания здесь:
http://www.dimastr.com/redemption/
Ниже привожу тестовый джоб по мотивам функции R_GetSenderAddress - третьей по счету на страничке уважаемой госпожи Мошер (см. по ссылке, любезно приведенной DSPIC ранее в этой ветке:
http://www.outlookcode.com/d/code/getsenderaddy.htm ). Получившийся код оказался даже еще проще, чем оригинал, за счет того, что годы идут, Redemption развивается и в нем появляются новые полезные методы (полагаю, что в версии dll, имевшейся в распоряжении Сью на момент написания книги отсутствовал метод SMTPAddress и поэтому ей пришлось немножко сложно выкручиваться).
X++:
// для тестирования Outlook должен быть уже запущен заранее
// и в нем открыто (двойным щелчком) произвольное письмо
static void test_getMail_fromRedemption(Args _args)
{
COM outlook; // Outlook.Application
COM activeInspector; // Outlook.Inspector
COM objMsg; // Outlook.MailItem
COM objSMail; // Redemption.SafeMailItem
COM objSenderAE; // Redemption.AddressEntry
;
outlook = COM::getObject('Outlook.Application');
activeInspector = outlook.ActiveInspector();
objMsg = activeInspector.CurrentItem();
objSMail = new COM('Redemption.SafeMailItem');
objSMail.Item( objMsg );
objSenderAE = objSMail.Sender();
if (objSenderAE)
info( strfmt('Адрес отправителя: %1', objSenderAE.SMTPAddress() ));
}