diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 4e08ed464efa9f0ca1ef711264e519267593625f..aa7b621f63db66ffb102792429bd11685412b20e 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -475,7 +475,7 @@ static ulong sockmsgtxt(SOCKET socket, smbmsg_t* msg, char* msgtxt, ulong maxlin
 		if(msg->from_net.type==NET_INTERNET && msg->from_net.addr!=NULL)
 			SAFECOPY(fromaddr,(char*)msg->from_net.addr);
 		else if(msg->from_net.type==NET_QWK && msg->from_net.addr!=NULL)
-			sprintf(fromaddr,"\"%s@%s\"@%s"
+			sprintf(fromaddr,"%s!%s@%s"
 				,msg->from,(char*)msg->from_net.addr,scfg.sys_inetaddr);
 		else 
 			usermailaddr(&scfg,fromaddr,msg->from);
@@ -2600,7 +2600,9 @@ static void smtp_thread(void* arg)
 
 			usernum=0;	/* unknown user at this point */
 
-			tp=strrchr(p,'@');	/* Double-@? Routed QWKnet mail? */
+			tp=strrchr(p,'@');		/* Double-@? Routed QWKnet mail? */
+			if(tp==NULL)
+				tp=strrchr(p,'!');	/* Or user!node@host format */
 			if(tp!=NULL) {
 				*tp=0;
 				SAFECOPY(rcpt_addr,p);