![]() |
#2 |
Участник
|
Чтение почты с 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(); } |
|