Хочу рассказать сегодня как получить список писем, аттачей из Windows Exchange и программно отсылать письма через протокол Simple MAPI.Для этого нам понадобится небольшой класс. Он слегка недоделан: отправка почты и получение списка аттачей, но это доделать не так сложно.
Описание протокола Simple MAPI можно почитать по адресу: http://msdn.microsoft.com/en-us/library/dd296728(v=VS.85).aspx
Итак, описание класса на C++ (Builder):
#ifndef SimpleMapiH
#define SimpleMapiH
using namespace std;
#include <windows.h>
#include <windowsx.h>
#include <mapi.h>
#include <winbase.h>
#include <vector>
//структура с информацией о письме
struct TMail {
AnsiString from;
AnsiString subj;
unsigned int files;
TDateTime date;
//указатели на письмо
LPSTR lpszMessageID;
MapiMessage *lpMessage;
};
class SimpleMapi {
private:
//библиотека и указатели на нужные нам функции
HANDLE hMAPILib;
LPMAPILOGON lpfnMAPILogon;
LPMAPIFINDNEXT lpfnMAPIFindNext;
LPMAPILOGOFF lpfnMAPILogoff;
LPMAPIREADMAIL lpfnMAPIReadMail;
LPMAPIFREEBUFFER lpfnMAPIFreeBuffer;
//текущая сессия
LHANDLE lhSession;
//буфферы
char szSeedMessageID[512];
char szMessageID[512];
LPSTR lpszSeedMessageID;
LPSTR lpszMessageID;
//указатель на письмо
MapiMessage *lpMessage;
//тип ошибки
ULONG err;
//разбор даты
TDateTime __fastcall ParseDate(AnsiString date);
public:
//полный список писем
vector<tmail> MailList;
__fastcall SimpleMapi();
//подключение к Exchenge
bool __fastcall Connect();
//перейти к первому письму из списка
bool __fastcall GetFirst();
//перейти к следующему письму из списка
bool __fastcall GetNext();
//получить указатель на полную информацию о текущем письме
bool __fastcall GetElement();
//заполнить структуру текущим письмом
TMail __fastcall Fetch();
//получить список всех писем (заполняем вектор)
bool __fastcall GetList();
//отключаемся от Exchange
void __fastcall Disconnect();
//отправить письмо - не реализовано
void __fastcall SendMail();
//получить список приложений письма по указателю
vector<ansistring> __fastcall GetAttachs(LPSTR lmID, MapiMessage *lpMes);
};
#endif