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;
}