www.pudn.com > antispam-addin.rar > mailmgr.cxx


#include "unihead.hxx" 
 
#include "configcontrol.hxx" 
#include "mailmgr.hxx" 
 
#define MAIL_HEAD_LEN	2048 
#define ITEM_VALUE_LEN	256 
#define TAG_LEN			32 
 
MailMgr::MailMgr() 
{ 
	m_pszMail = NULL; 
} 
 
MailMgr::MailMgr(Mail *pMail) 
{ 
} 
 
MailMgr::~MailMgr() 
{ 
	if(m_pszMail) 
	{ 
		free(m_pszMail); 
	} 
 
	if(m_pszTag) 
	{ 
		free(m_pszTag); 
	} 
} 
 
char *MailMgr::FormatMail() 
{ 
 
	return 0; 
} 
 
int MailMgr::Parse(char *pszMail,Mail *pMail) 
{ 
	int nHeadLen = MAIL_HEAD_LEN; 
	Mail *m_pMail = pMail; 
 
	m_pszTag = (char*)malloc(TAG_LEN); 
 
	m_pszMail = (char*)malloc(MAIL_HEAD_LEN); 
 
	/////////get mail head 
#ifdef WINDOWS 
	char* pDest = strstr(pszMail,"\n\n"); 
#else 
	char* pDest = strstr(pszMail,"\r\n\r\n"); 
#endif 
 
	if(!pDest) 
	{ 
		return -1; 
	} 
 
	nHeadLen = pDest - pszMail + 1; 
	if(nHeadLen > MAIL_HEAD_LEN) 
	{ 
		return -1; 
	} 
 
	memcpy(m_pszMail,pszMail,nHeadLen); 
	m_pszMail[nHeadLen] = '\0'; 
	//////////////////////////// 
 
	char szValue[ITEM_VALUE_LEN]; 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("Return-path",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setReturnPath(szValue); 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("Cc",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setCc(szValue); 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("Date",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setDate(szValue); 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("From",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setFrom(szValue); 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("Subject",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setSubject(szValue); 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("To",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setTo(szValue); 
 
	memset(szValue,0,ITEM_VALUE_LEN); 
	if(!ReadHeadItem("Received",szValue)) 
	{ 
		return -1; 
	} 
	m_pMail->setReceived(szValue); 
 
	return 0; 
} 
 
bool MailMgr::getMail(Mail *pMail) 
{ 
	 
	return true; 
} 
 
 
bool MailMgr::ReadHeadItem(char *szItem,char* szValue) 
{//Only get mail head... 
	bool bRet = false; 
 
	char* szLine = NULL; 
	char* szTemp = NULL; 
	 
	int len = strlen(szItem); 
 
	memset(m_pszTag,0,TAG_LEN); 
	memcpy(m_pszTag,szItem,len); 
 
	m_pszTag[len] = ':'; 
	len= strlen(m_pszTag); 
		 
	szLine = strstr(m_pszMail,m_pszTag); 
	if(szLine) 
	{ 
		szTemp = strstr(szLine,"\n"); 
		if(szTemp) 
		{ 
			memcpy(szValue,szLine + len,szTemp - szLine - len); 
		}else 
		{ 
			memcpy(szValue,szLine + len,strlen(szLine) - len); 
		} 
 
		bRet = true; 
	} 
 
	return bRet; 
}