AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.06.2008, 14:22   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Способ получения адреса отправителя, рассмотренный выше, может вызывать неудобство, связанное с тем, что 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() ));
}
Старый 19.06.2008, 11:45   #2  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Спасибо еще раз 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();
    }
}
Теги
документация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Юридический и фактический адрес в счете на оплату madproger DAX: Программирование 2 26.01.2007 12:55
Адрес клиента Pegiy DAX: Функционал 4 29.07.2004 11:19
Можно ли в одном select`e получить maxof и minof по одному полю? ArturK DAX: Программирование 2 28.04.2004 12:28
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:02.