diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 0f2228621c60bd642f95d0b4dd62d0571c614373..36bc06d570ebde845b31770e2d677c1241e2e7a9 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -1757,7 +1757,7 @@ static void smtp_thread(void* arg) BOOL auth_login; BOOL routed=FALSE; BOOL dnsbl_recvhdr; - BOOL msg_rejected; + BOOL msg_handled; uint subnum=INVALID_SUB; FILE* msgtxt=NULL; char msgtxt_fname[MAX_PATH+1]; @@ -2051,7 +2051,7 @@ static void smtp_thread(void* arg) fclose(rcptlst), rcptlst=NULL; /* External Mail Processing here */ - msg_rejected=FALSE; + msg_handled=FALSE; if(startup->proc_cfg_file[0] && (proc_cfg=fopen(startup->proc_cfg_file,"r"))!=NULL) { sprintf(proc_err_fname,"%sSMTP.%s.err", scfg.data_dir, session_id); @@ -2104,40 +2104,39 @@ static void smtp_thread(void* arg) ,str); } fclose(proc_err); - msg_rejected=TRUE; + msg_handled=TRUE; } remove(proc_err_fname); /* Remove error file here */ - if(!msg_rejected + if(!msg_handled && (!fexist(msgtxt_fname) || !fexist(rcptlst_fname))) { lprintf(LOG_WARNING,"%04d SMTP External process removed %s file" ,socket, fexist(msgtxt_fname)==FALSE ? "message text" : "recipient list"); sockprintf(socket,ok_rsp); - msg_rejected=TRUE; + msg_handled=TRUE; } } /* Re-open files */ - /* We must do this before continuing for rejected msgs */ + /* We must do this before continuing for handled msgs */ /* to prevent freopen(NULL) and orphaned temp files */ - if((rcptlst=fopen(rcptlst_fname,"r"))==NULL) { + if((rcptlst=fopen(rcptlst_fname,fexist(rcptlst_fname) ? "r":"w+"))==NULL) { lprintf(LOG_ERR,"%04d !SMTP ERROR %d re-opening recipient list: %s" ,socket, errno, rcptlst_fname); - if(!msg_rejected) + if(!msg_handled) sockprintf(socket,sys_error); continue; } - if((msgtxt=fopen(msgtxt_fname,"rb"))==NULL) { - lprintf(LOG_ERR,"%04d !SMTP ERROR %d re-opening message file: %s" - ,socket, errno, msgtxt_fname); - if(!msg_rejected) - sockprintf(socket,sys_error); + if(msg_handled) { + lprintf(LOG_NOTICE,"%04d SMTP Message handled by external mail processor" + ,socket); continue; } - if(msg_rejected) { - lprintf(LOG_NOTICE,"%04d SMTP Message rejected by external mail processor" - ,socket); + if((msgtxt=fopen(msgtxt_fname,"rb"))==NULL) { + lprintf(LOG_ERR,"%04d !SMTP ERROR %d re-opening message file: %s" + ,socket, errno, msgtxt_fname); + sockprintf(socket,sys_error); continue; } @@ -2747,7 +2746,6 @@ static void smtp_thread(void* arg) else if(!strnicmp(buf,"SAML FROM:",10)) cmd=SMTP_CMD_SAML; - /* reset recipient list */ /* reset recipient list */ if((rcptlst=freopen(rcptlst_fname,"w+",rcptlst))==NULL) { lprintf(LOG_ERR,"%04d !SMTP ERROR %d re-opening %s"