Для этого нам понадобится небольшой класс. Он слегка недоделан: отправка почты и получение списка аттачей, но это доделать не так сложно.
Описание протокола 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