diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 5171bfdfad1b10f8985f6c074104a631fe43769e..bf4e818c795b09ce0ca27d37f10864774e6049d9 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -401,8 +401,8 @@ static int sockreadline(SOCKET socket, char* buf, int len)
 
 		if(i<1) {
 			if(i==0) {
-				if((time(NULL)-start)>startup->max_inactivity) {
-					lprintf(LOG_WARNING,"%04d !SOCKET INACTIVE",socket);
+				if(startup->max_inactivity && (time(NULL)-start)>startup->max_inactivity) {
+					lprintf(LOG_WARNING,"%04d !TIMEOUT in sockreadline (%u seconds):  INACTIVE SOCKET",socket,startup->max_inactivity);
 					return(-1);
 				}
 				continue;
@@ -433,8 +433,11 @@ static BOOL sockgetrsp(SOCKET socket, char* rsp, char *buf, int len)
 
 	while(1) {
 		rd = sockreadline(socket, buf, len);
-		if(rd<1) 
+		if(rd<1) {
+			if(rd==0)
+				lprintf(LOG_WARNING,"%04d !RECEIVED BLANK RESPONSE, Expected '%s'", socket, rsp);
 			return(FALSE);
+		}
 		if(buf[3]=='-')	{ /* Multi-line response */
 			if(startup->options&MAIL_OPT_DEBUG_RX_RSP) 
 				lprintf(LOG_DEBUG,"%04d RX: %s",socket,buf);
@@ -4264,6 +4267,7 @@ static void sendmail_thread(void* arg)
 	ulong		ip_addr;
 	ulong		dns;
 	ulong		lines;
+	ulong		bytes;
 	BOOL		success;
 	BOOL		first_cycle=TRUE;
 	SOCKET		sock=INVALID_SOCKET;
@@ -4739,16 +4743,22 @@ static void sendmail_thread(void* arg)
 				bounce(sock, &smb,&msg,err,/* immediate: */buf[0]=='5');
 				continue;
 			}
-			lprintf(LOG_DEBUG,"%04d SEND sending message text (%u bytes)"
-				,sock, strlen(msgtxt));
+			bytes=strlen(msgtxt);
+			lprintf(LOG_DEBUG,"%04d SEND sending message text (%u bytes) begin"
+				,sock, bytes);
 			lines=sockmsgtxt(sock,&msg,msgtxt,-1);
+			lprintf(LOG_DEBUG,"%04d SEND send of message text (%u bytes, %u lines) complete, waiting for acknowledgement (250)"
+				,sock, bytes, lines);
 			if(!sockgetrsp(sock,"250", buf, sizeof(buf))) {
-				remove_msg_intransit(&smb,&msg);
-				SAFEPRINTF3(err,badrsp_err,server,buf,"250");
-				bounce(sock, &smb,&msg,err,/* immediate: */buf[0]=='5');
-				continue;
+				/* Wait doublely-long for the acknowledgement */
+				if(buf[0] || !sockgetrsp(sock,"250", buf, sizeof(buf))) {
+					remove_msg_intransit(&smb,&msg);
+					SAFEPRINTF3(err,badrsp_err,server,buf,"250");
+					bounce(sock, &smb,&msg,err,/* immediate: */buf[0]=='5');
+					continue;
+				}
 			}
-			lprintf(LOG_INFO,"%04d SEND message transfer complete (%lu lines)", sock, lines);
+			lprintf(LOG_INFO,"%04d SEND message transfer complete (%u bytes, %lu lines)", sock, bytes, lines);
 
 			/* Now lets mark this message for deletion without corrupting the index */
 			msg.hdr.attr|=MSG_DELETE;
@@ -5488,9 +5498,9 @@ void DLLCALL mail_server(void* arg)
 				,server_socket, active_clients.value);
 			start=time(NULL);
 			while(active_clients.value) {
-				if(time(NULL)-start>startup->max_inactivity) {
-					lprintf(LOG_WARNING,"%04d !TIMEOUT waiting for %d active clients"
-						,server_socket, active_clients.value);
+				if(startup->max_inactivity && time(NULL)-start>startup->max_inactivity) {
+					lprintf(LOG_WARNING,"%04d !TIMEOUT (%u seconds) waiting for %d active clients"
+						,server_socket, startup->max_inactivity, active_clients.value);
 					break;
 				}
 				mswait(100);