|
| // 123.cpp : Defines the entry point for the console application. //
#include "stdafx.h"
#include <windows.h> #include <mapi.h> #include <stdio.h>
int main(void) { ULONG error; // Для хранения кода ошибки LHANDLE lhSession; // Сессия MAPI MapiMessage *MAPIMessage; // Структура сообщения MapiRecipDesc *MAPIRecipient; // Структура получателя CHAR rgchMsgID[513]; // Идентификатор сообщение >512 rgchMsgID[0]='\0'; ULONG i; int totalLength; HINSTANCE hMAPILib = LoadLibrary("MAPI32.DLL"); // Загружаем библиотеку if (hMAPILib==0) return 0;
//Объявляем функции из библиотеки LPMAPILOGON lpfnMAPILogon = (LPMAPILOGON)GetProcAddress(hMAPILib, "MAPILogon"); LPMAPILOGOFF lpfnMAPILogoff = (LPMAPILOGOFF)GetProcAddress(hMAPILib, "MAPILogoff"); LPMAPIFINDNEXT lpfnMAPIFindNext = (LPMAPIFINDNEXT)GetProcAddress(hMAPILib, "MAPIFindNext"); LPMAPIREADMAIL lpfnMAPIReadMail=(LPMAPIREADMAIL )GetProcAddress(hMAPILib, "MAPIReadMail"); LPMAPIDELETEMAIL lpfnMAPIDeleteMail=(LPMAPIDELETEMAIL )GetProcAddress(hMAPILib, "MAPIDeleteMail"); LPMAPIFREEBUFFER lpfnMAPIFreeBuffer=(LPMAPIFREEBUFFER )GetProcAddress(hMAPILib, "MAPIFreeBuffer");
/*--MAPILOGON--------------------------------------------------------------*/ error=(*lpfnMAPILogon)(0, // Handle диалогового окна созданного MAPILogon NULL,// Указатель на строку, содержащей путь к файлу настроек NULL,// Указатель на строку, содержащую пароль для доступа MAPI_NEW_SESSION, // Флаги: // MAPI_FORCE_DOWNLOAD - функция пытается загрузить все сообщения // MAPI_LOGON_UI - показать диалог для идентификации // MAPI_NEW_SESSION - создать новую сессию 0, // Зарезервировано &lhSession); // Указатель на сессию if (error!=SUCCESS_SUCCESS) return 0;
// ЦЕЛЬ: вертимся в цикле, пока SUCCESS_SUCCESS, потом вылетим break'om else{ do{ error = (*lpfnMAPIFindNext)(lhSession, // Сессия 0, NULL, NULL,//rgchMsgID, // Указатель на строку-идентификатор для поиска TODO rgchMsgID MAPI_GUARANTEE_FIFO, // Флаги: // MAPI_GUARANTEE_FIFO - по времени получения // MAPI_LONG_MSGID - длтнный идентификатор сообщения // MAPI_UNREAD_ONLY - только не прочитанные сообщения 0, rgchMsgID); // Указатель на идентификатор сообщения if (error != SUCCESS_SUCCESS) break;
error = (*lpfnMAPIReadMail)(lhSession, // Сессия 0, rgchMsgID, // Указатель на идентификатор сообщения, которое должно быть прочитано MAPI_PEEK, // Флаги: // MAPI_BODY_AS_FILE - сообщение сохранено в файл // MAPI_ENVELOPE_ONLY читать только заголовок письма // MAPI_PEEK - не отмечаются прочитанные сообщения пометкой непрочитанные // MAPI_SUPPRESS_ATTACH - приложения не загружено, но сообщение будет читаться в структуру MapiMessage // Зарезервировано 0L, &MAPIMessage); // Указатель на место, куда будет сохранено сообщение
if(error != SUCCESS_SUCCESS) break;
if(strcmp(MAPIMessage->lpszSubject,"111")==0){ //проверка темы error=(*lpfnMAPIFreeBuffer)(MAPIMessage);//очищаем буффер - так надо! //если нашли письмо с нужной темой - удаляем его error = (*lpfnMAPIDeleteMail)(lhSession, // Сессия 0, rgchMsgID, 0, 0); //if(error!=SUCCESS_SUCCESS ) //sorry break; } }while (1);
/*--MAPILOGOFF-------------------------------------------------------------*/
// Закрытие сессии (*lpfnMAPILogoff)(lhSession, //Без флагов 0L, 0L, 0L); FreeLibrary(hMAPILib); return 0;
} } |
|