diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 4d5da9f7de655527a2539f3d356373246fade44d..f9a795db21f8b6cba8cb4afa90ecfce07c28cfaf 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -2224,6 +2224,7 @@ static void smtp_thread(void* arg)
 	SOCKADDR_IN server_addr;
 	IN_ADDR		dnsbl_result;
 	BOOL*		mailproc_to_match;
+	int			mailproc_match;
 	JSRuntime*	js_runtime=NULL;
 	JSContext*	js_cx=NULL;
 	JSObject*	js_glob=NULL;
@@ -3670,23 +3671,7 @@ static void smtp_thread(void* arg)
 				lprintf(LOG_DEBUG,"%04d SMTP NAME ALIAS: %s (for %s)"
 					,socket,p,rcpt_addr);
 		
-			if(!strnicmp(p,"sub:",4)) {		/* Post on a sub-board */
-				p+=4;
-				for(i=0;i<scfg.total_subs;i++)
-					if(!stricmp(p,scfg.sub[i]->code))
-						break;
-				if(i>=scfg.total_subs) {
-					lprintf(LOG_NOTICE,"%04d !SMTP UNKNOWN SUB-BOARD: %s", socket, p);
-					sockprintf(socket, "550 Unknown sub-board: %s", p);
-					continue;
-				}
-				subnum=i;
-				sockprintf(socket,ok_rsp);
-				state=SMTP_STATE_RCPT_TO;
-				rcpt_count++;
-				continue;
-			}
-
+			/* Check if message is to be processed by an external mail processor */
 			for(i=0;i<mailproc_count;i++) {
 
 				if(!mailproc_list[i].process_dnsbl && dnsbl_result.s_addr)
@@ -3704,15 +3689,34 @@ static void smtp_thread(void* arg)
 						break;
 				}
 			}
+			mailproc_match=i;
+
+			if(!strnicmp(p,"sub:",4)) {		/* Post on a sub-board */
+				p+=4;
+				for(i=0;i<scfg.total_subs;i++)
+					if(!stricmp(p,scfg.sub[i]->code))
+						break;
+				if(i>=scfg.total_subs) {
+					lprintf(LOG_NOTICE,"%04d !SMTP UNKNOWN SUB-BOARD: %s", socket, p);
+					sockprintf(socket, "550 Unknown sub-board: %s", p);
+					continue;
+				}
+				subnum=i;
+				sockprintf(socket,ok_rsp);
+				state=SMTP_STATE_RCPT_TO;
+				rcpt_count++;
+				continue;
+			}
+
 			/* destined for a (non-passthru) external mail processor */
-			if(i<mailproc_count) {
+			if(mailproc_match<mailproc_count) {
 				fprintf(rcptlst,"[%u]\n",rcpt_count++);
 				fprintf(rcptlst,"%s=%s\n",smb_hfieldtype(RECIPIENT),rcpt_addr);
 #if 0	/* should we fall-through to the sysop account? */
 				fprintf(rcptlst,"%s=%u\n",smb_hfieldtype(RECIPIENTEXT),1);
 #endif
 				lprintf(LOG_INFO,"%04d SMTP Routing mail for %s to External Mail Processor: %s"
-					,socket, rcpt_addr, mailproc_list[i].name);
+					,socket, rcpt_addr, mailproc_list[mailproc_match].name);
 				sockprintf(socket,ok_rsp);
 				state=SMTP_STATE_RCPT_TO;
 				continue;