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