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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.02.2008, 10:10   #1  
FiGr is offline
FiGr
Axapta Retail User
Axapta Retail User
 
13 / 10 (1) +
Регистрация: 30.12.2004
Адрес: Иваново
Получение почты в Ах.
ПОявилась задача обработать в ахапке файл полученный по e-mail;
Вопрос как это можно сделать, т.е. прочитать почтовый ящик, проверить на вложения и т.д.?
Старый 12.02.2008, 15:33   #2  
Sergey_P is offline
Sergey_P
Участник
Сотрудники компании GMCS
 
10 / 11 (1) +
Регистрация: 30.08.2006
Чтение почты с Exchenge
static void Job100(Args _args)
{
#define.exchangeServer('test') // str имя сервера Exchange
#define.exchangeUser('test') // имя пользователя
#define.PR_ATTACH_DATA_BIN(0x37010102)
COM session = new COM("MAPI.Session");
COM inbox;
COM messageList, filter, message;
COM attachList, attach;
COM fieldList, field;
COM obj;
BinData bin = new BinData();
container c;
int attachCnt, attachIdx;
str 255 messageId;
comvariant var;
int cnt = 0;

str vDate(COMVariant _var) { return substr(_var.toString(),1,19); }
str vStr(COMVariant _var) { return _var.bStr(); }
int vInt(COMVariant _var) { return _var.int(); }
COMVariant empty() { return COMVariant::createNoValue(); }
COM combydisp(COMVariant _var) {
;
if (_var.variantType() != COMVariantType::VT_DISPATCH)
throw Error(strfmt("bad variant type (%1)",_var.variantType()));
if (!_var.iDispatch())
return null;
return COM::createFromVariant(_var);
}
setprefix("Просмотр почтового ящика");
session.Logon(
empty(), //[profileName]
empty(), //[profilePassword]
COMVariant::createFromBoolean(false), //[showDialog]
COMVariant::createFromBoolean(true), //[newSession]
COMVariant::createFromInt(-1), //[parentWindow]
COMVariant::createFromBoolean(false), //[NoMail]
COMVariant::createFromStr(strfmt("%1\n%2",#exchangeServer,#exchangeUser)));
inbox = combydisp(session.Inbox());
messageList = combydisp(inbox.Messages());
filter = combydisp(messageList.Filter());
filter.Unread(true);
message = combydisp(messageList.GetFirst());
while (message) {
messageId = vStr(message.ID());
setprefix(strfmt("получено: %1 тема: %2",vDate(message.TimeReceived()),vStr(message.Subject())));
attachList = combydisp(message.Attachments());
attachCnt = vInt(attachList.Count());
for (attachIdx=1; attachIdx <= attachCnt; attachIdx++) {
attach = combydisp(attachList.Item(attachIdx));
if (strscan(vStr(attach.Name()),".xml",1,255)) {
fieldList = combydisp(attach.Fields());
obj = combydisp(fieldList.Item(#PR_ATTACH_DATA_BIN));
if (obj) {
c = BinData::stringToData(vStr(obj.Value()));
bin.setData(c);
// здесь обработка письма или вложений
}
}
} // attach
message.Unread(false); // если всё нормально
//потом message.Delete(true);
message.Update();
cnt++; // не увлекайся
if (cnt>100)
break;
message = combydisp(messageList.GetNext());
}
session.Logoff();
}
Старый 12.02.2008, 17:56   #3  
FiGr is offline
FiGr
Axapta Retail User
Axapta Retail User
 
13 / 10 (1) +
Регистрация: 30.12.2004
Адрес: Иваново
разобрался сам
Спасибо за вариант, но разобрался сам.



X++:
static void mail_Attachment(Args _args)
{
    #SysOutlookCOMDEF
    SysOutlookApplication       outlook = new SysOutlookApplication();
    SysOutlook_Items            collection;
    SysOutlook_NameSpace        nameSpace;
    SysOutlookMapiFolder        inboxFolder;
    SysOutlookMailItem          mailItem;
    COM                         nextItem;
    SysOutlookAttachments       atts;
    SysOutlookAttachment        att;
    int                         a;
    ;

    namespace = outlook.getNameSpace('MAPI');

    inboxFolder = namespace.getDefaultFolder(#OlDefaultFolders_olFolderInbox);
    collection = inboxFolder.items();

    nextItem = collection.GetFirst();
    while (nextItem)
    {
        mailItem = new SysOutlookMailItem(nextItem);
        atts = mailItem.Attachments();
        a = atts.Count();
        while (a)
        {
            att = atts.Item(comVariant::createFromInt(a));
            info(strfmt("Тема '%1', файл '%2'",mailItem.Subject(),att.FileName()));
            att.SaveAsFile("c:\\" + att.FileName());
            a--;
        }
        nextItem = collection.GetNext();
    }
}
Старый 28.07.2008, 11:40   #4  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Пытались повторить вариант из второго поста, добавили лишь возможность обрабатывать письма из определенных папок, которые могут создаваться пользователем. При попытке запуска батча падает на mapiSession.GetFolder(""), MAPI_E_LOGON_FAILED(80040111).
Старый 28.07.2008, 12:04   #5  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
У меня вопрос, по теме как раз:
пытаюсь отправить почту так - SysEmailTable::sendMailSimple(_address,_subject,_body);

_body - заполняю обычную строку данными и передаю как параметр.
Проблема в том, что приходит письмо одной строкой, как сделать перевод строки??
'\n' не помогает
__________________
Романтик..
Старый 28.07.2008, 14:08   #6  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от Dronas Посмотреть сообщение
Пытались повторить вариант из второго поста, добавили лишь возможность обрабатывать письма из определенных папок, которые могут создаваться пользователем. При попытке запуска батча падает на mapiSession.GetFolder(""), MAPI_E_LOGON_FAILED(80040111).
Вроде ж как обсуждалось много раз:
ссылка на outlook
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 16.09.2009, 11:09   #7  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Привет!
Сам недавно пытался решить такую задачу но из C# для CRM правда мне нехватило сил довести ее до конца... появились другие дела как обычено и пришлось сделать очень некрасиво - через outlook. Если вы разберетесь как помжно прочитать почту напряму через Exchange то Вам 5-ка!
Вообще для это можно использовать несколько вариантов сеединений, я начал копать в сторону WebServices это для exchange 2007, для exchange 2003 использовался WebDav, по сути тоже самое. Мне кажется самый правильный способ это реализация библиотеки на C# или С++, а потом ее дергать из Аксапты.
Посмотри ссылки
http://www.codemeit.com/webservices/...responses.html

http://blogs.visoftinc.com/?tag=/c%23

http://www.isrcomputing.com/index.ph...tent&Itemid=86
Старый 19.11.2015, 13:56   #8  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Выдается ошибка:
COM-объект класса "MAPI.Session" не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере "X0001148".

Так понимаю не зарегистрирована DLL в ситсеме. ОС 64. Не могу найти под нее длл-ку.
Старый 20.11.2015, 09:31   #9  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
COM уже умер давно
не шевелите его
Старый 20.11.2015, 09:35   #10  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Тогда вопрос, как можно напрямую к Exchange обратиться, минуя Outlook?
Старый 20.11.2015, 10:25   #12  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Цитата:
Сообщение от axm2013 Посмотреть сообщение
Ну класс ExchangeServiceBinding и NetworkCredential отсутствует. Аксапта 4,0
Старый 20.11.2015, 20:28   #13  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
это .NET Framework классы
не помню точно, но вроде в AX4 уже был CLR Interop
используйте его
если код сильно сложный, и со всякими генериками, то проще будет внешнюю DLL сделать и её уже использовать в AX

Последний раз редактировалось lvan; 20.11.2015 в 20:32.
Теги
mapi, outlook, почта

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ограничить передвижение окон пределами главного окна АХ kashperuk DAX: База знаний и проекты 7 07.10.2016 11:09
Общая схема порядка обновления с АХ 3.0 на АХ 4.0 Vadim Korepin DAX: Функционал 11 25.11.2008 17:40
Help! Опись дистрибутива АХ 4.0. lden DAX: Функционал 0 07.03.2007 07:32
Совместимость Ах 3.0 и Ах 4.0 oleg_e DAX: Администрирование 21 01.02.2007 19:39
Параметры почты - не работает... soin DAX: Функционал 3 09.01.2004 01:00

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

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

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