|
![]() |
#1 |
Moderator
|
Способ получения адреса отправителя, рассмотренный выше, может вызывать неудобство, связанное с тем, что 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() )); } |
|
![]() |
#2 |
Участник
|
Спасибо еще раз Gustav за полезную dll ку
вот так теперь читаем всю почту из outlook с помощью Redemption X++: static void maks_test_getMail_fromRedemption(Args _args) { #SysOutlookCOMDEF COM outlook; // Outlook.Application COM nameSpace; // Outlook.nameSpace COM inboxFolder; // Outlook.nameSpace.getDefaultFolder COM collection; // Outlook.nameSpace.getDefaultFolder.items COM nextItem; // Outlook.nameSpace.getDefaultFolder.items.item COM objMsg; // Outlook.MailItem COM objSMail; // Redemption.SafeMailItem COM objSenderAE; // Redemption.AddressEntry ; objSMail = new COM('Redemption.SafeMailItem'); outlook = COM::getObject('Outlook.Application'); nameSpace = outlook.getNameSpace("MAPI"); inboxFolder = nameSpace.getDefaultFolder(#OlDefaultFolders_olFolderInbox); collection = inboxFolder.items(); nextItem = collection.getFirst(); while (nextItem) { objSMail.Item( nextItem ); objSenderAE = objSMail.Sender(); if (objSenderAE) info( strfmt('Адрес отправителя: %1', objSenderAE.SMTPAddress() )); info("Тема : " + objSMail.Subject()); info("Тело письма: " + objSMail.HTMLBody()); nextItem = collection.getNext(); } } |
|
Теги |
документация |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|