Чтение почты с 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();
}
|