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