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


#include "unihead.hxx" 
 
#include "deliver.hxx" 
#include "log.hxx" 
#include "mail.hxx" 
#include "mailmgr.hxx" 
#include "md5.hxx" 
#include "authenticitem.hxx" 
#include "templatemail.hxx" 
#include "templatemailmgr.hxx" 
#include "configuremgr.hxx" 
#include "databasemgr.hxx" 
 
#include "configcontrol.hxx" 
 
#define SPOOL_DIR_LEN	128 
#define MAIL_LEN		2048 
#define AUTH_CODE_LEN	64 
 
int main() 
{ 
	printf("anti-spam mail server...\r\n"); 
 
	char SpoolDir[SPOOL_DIR_LEN]; 
	memset(SpoolDir,0,SPOOL_DIR_LEN); 
 
	char originalMail[MAIL_LEN]; 
	memset(originalMail,0,MAIL_LEN); 
	int MailLen = MAIL_LEN; 
 
 
	////////////////////// 
	Mail *pMail = NULL; 
	TemplateMailMgr *pTmMgr = NULL; 
	DatabaseMgr *pDBMgr = NULL; 
	Deliver *pDeliver = NULL; 
 
	FILE *fp = NULL; 
 
	MailMgr mailMgr; 
 
	int nCharCnt = 0; 
	////////////////////// 
 
 
	ConfigureMgr configureMgr("./config"); 
 
	Configure *pConfigure = new Configure(); 
	if(!configureMgr.getConfigure(pConfigure)) 
	{ 
		printf("Reading config failed!\r\n"); 
 
		goto FINISHED; 
	} 
	 
	pTmMgr = new TemplateMailMgr(pConfigure->getTemplateMail()); 
	nCharCnt = pTmMgr->ReadTemplateMail(); 
 
	pDBMgr = new DatabaseMgr(pConfigure); 
 
	pDeliver = new Deliver(); 
 
	////////////////////// 
	fp = fopen("./mail.txt","r"); 
	MailLen = fread(originalMail,1,MAIL_LEN,fp); 
	fclose(fp); 
 
	////////////////////// 
	pMail = new Mail(); 
	 
	mailMgr.Parse(originalMail,pMail); 
 
	if(!pDeliver->Login(pConfigure)) 
	{ 
		printf(pDeliver->GetRecentError()); 
		printf("\r\n"); 
 
		goto FINISHED; 
	} 
 
	if(pDBMgr->IsAuthenticSender(pMail->getReturnPath()) != true) 
	{//The sender is not authentic 
		if(pDBMgr->IsSpoolSender(pMail->getSubject()) != true) 
		{//The Sender has not been authoritied 
			//generate authcode 
			char AuthCode[AUTH_CODE_LEN]; 
			memset(AuthCode,0,AUTH_CODE_LEN); 
 
			int Len = AUTH_CODE_LEN; 
 
			Md5 md5; 
			md5.GenerateAuthcode(AuthCode,Len); 
 
			//generate tempmail 
			pTmMgr->SetValue("USER",pConfigure->getUser()); 
			pTmMgr->SetValue("RETURN_PATH",pConfigure->getHostMail()); 
			pTmMgr->SetValue("SENDER",pConfigure->getUser()); 
			pTmMgr->SetValue("MD5HASH",AuthCode); 
 
			char *pszAuthMail = (char*)malloc(nCharCnt + 128); 
			memset(pszAuthMail,0,nCharCnt + 128); 
			int AuthMailLen = nCharCnt + 128; 
 
			pTmMgr->GenerateAuthMail(pszAuthMail,AuthMailLen); 
/* 
			FILE *fptest = fopen("testmail.txt","w"); 
			fwrite(pszAuthMail,1,AuthMailLen,fptest); 
			fclose(fptest); 
*/ 
			//send authentic email to the sender. 
			if(pDeliver->SendMail(pszAuthMail,AuthMailLen) != true) 
			{//delivering mail failed. 
				printf(pDeliver->GetRecentError()); 
				printf("\r\n"); 
				 
				goto FINISHED; 
			} 
 
			pDeliver->Logoff(); 
 
			//spool original mail 
			pDBMgr->Spool(AuthCode,originalMail); 
			 
			goto FINISHED; 
		} 
 
		AuthenticItem *pAuthItem = new AuthenticItem(); 
		pAuthItem->setAddress(pMail->getReturnPath()); 
		pDBMgr->InsertIntoAuthenticDB(pAuthItem); 
		 
		delete pAuthItem; 
 
		/////////////////////////////////// 
		//read original mail 
		pDBMgr->GetSpoolMail(pMail->getSubject(),originalMail,MailLen); 
	} 
 
	/////////////////////////////////// 
	//deliver original mail 
	////////////////////// 
	memset(originalMail,0,MAIL_LEN); 
	fp = fopen("./user.txt","r"); 
	MailLen = fread(originalMail,1,MAIL_LEN,fp); 
	fclose(fp); 
 
	////////////////////// 
	if(pDeliver->SendMail(originalMail,MailLen) != true) 
	{//delivering mail failed. 
		delete pDeliver; 
 
		printf(pDeliver->GetRecentError()); 
		printf("\r\n"); 
 
		goto FINISHED; 
	} 
 
	pDeliver->Logoff(); 
 
FINISHED: 
	if(pDeliver) 
	{ 
		delete pDeliver; 
	} 
 
	if(pTmMgr) 
		delete pTmMgr; 
 
	if(pConfigure) 
		delete pConfigure; 
 
	if(pDBMgr) 
		delete pDBMgr; 
 
	if(pMail) 
		delete pMail; 
 
	return 0; 
}