www.pudn.com > NETINFO.rar > EmailAnalyse.h
#ifndef _EMAILANALYSE_H_
#define _EMAILANALYSE_H_
#include "EmailDecode.h"
typedef void (*OnMessageHeader)(void *pUserData, const char* from,
const char* to, const char* subject);
typedef void (*OnMessageEntityHeader)(void *pUserData,
const char* mimeMainType, const char* mimeSubType,
const char* filename);
typedef void (*OnMessageEntityBody)(void *pUserData, const BYTE* pData, DWORD length);
typedef void (*OnMessageEntityBodyEnd)(void *pUserData);
struct MESSAGE_DECODE_CALLBACKS
{
OnMessageHeader fnOnMessageHeader;
OnMessageEntityHeader fnOnMessageEntityHeader;
OnMessageEntityBody fnOnMessageEntityBody;
OnMessageEntityBodyEnd fnOnMessageEntityBodyEnd;
};
#define MAX_EMAIL_LINE 1024
struct MESSAGE_HEADERS
{
char from[MAX_EMAIL_LINE];
char to[MAX_EMAIL_LINE];
char subject[MAX_EMAIL_LINE];
char mime_Version[MAX_EMAIL_LINE];
char content_Type[MAX_EMAIL_LINE];
char content_Subtype[MAX_EMAIL_LINE];
char charset[MAX_EMAIL_LINE];
char boundary[MAX_EMAIL_LINE];
char name[MAX_EMAIL_LINE];
char content_Transfer_Encoding[MAX_EMAIL_LINE];
char content_Disposition[MAX_EMAIL_LINE];
char filename[MAX_EMAIL_LINE];
char content_Id[MAX_EMAIL_LINE];
char content_Language[MAX_EMAIL_LINE];
};
enum MESSAGE_STATUS{MESSAGE_BEGIN, MESSAGE_HEADER, MESSAGE_BODY, MESSAGE_END};
class CMessageDecoder
{
public:
CMessageDecoder(void*pUserData, const MESSAGE_DECODE_CALLBACKS *pFuncs);
~CMessageDecoder();
//inputLine must be ending with "\r\n", inputStrlen must be strlen(inputLine)
void GetLine(const char inputLine[], int inputStrlen);
void FindEnd();
private:
void PostGetHeader();
private:
char m_szHeader[MAX_EMAIL_LINE];
MESSAGE_HEADERS m_headers;
MESSAGE_STATUS m_status;
union MESSAGE_DATA_ACCEPTER
{
CMessageDecoder *m_pMessageDecoder;
CTransferDecoder *m_pTransferDecoder;
} m_dataAccepter;
enum MESSAGE_TYPE {MESSAGE_TYPE_DATA, MESSAGE_TYPE_MULTIPART, MESSAGE_TYPE_MESSAGE} m_messageType;
private: //callback functions to output data
void *m_pUserData;
const MESSAGE_DECODE_CALLBACKS m_funcs;
};
#endif