diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 187155b40e52a77fc8a036ee6893bd1930e74868..845e4cf7aa963fdd3520d155187ce5aadeeaa5ec 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -1648,7 +1648,7 @@ static void pop3_thread(void* arg)
 				smb_unlocksmbhdr(&smb);
 				smb_freemsgmem(&msg);
 				if(i!=SMB_SUCCESS) {
-					lprintf(LOG_ERR,"%04d %s <%s> !ERROR %d (%s) marking message as read"
+					lprintf(LOG_ERR,"%04d %s <%s> !ERROR %d (%s) marking message for deletion"
 						, socket, client.protocol, user.alias, i, smb.last_error);
 					sockprintf(socket,client.protocol,session,"-ERR %d marking message for deletion",i);
 					continue;
@@ -3811,6 +3811,8 @@ static void smtp_thread(void* arg)
 				i=savemsg(&scfg, &smb, &msg, &client, startup->host_name, msgbuf, /* remsg: */NULL);
 				if(smb_countattachments(&smb, &msg, msgbuf) > 0)
 					msg.hdr.auxattr |= MSG_MIMEATTACH;
+				if(scfg.inetmail_misc&NMAIL_KILL)
+					msg.hdr.netattr |= MSG_KILLSENT;
 				free(msgbuf);
 				if(i!=SMB_SUCCESS) {
 					smb_close(&smb);
@@ -3878,6 +3880,8 @@ static void smtp_thread(void* arg)
 
 					if(nettype == NET_FIDO) {
 						newmsg.hdr.netattr |= MSG_LOCAL;
+						if(scfg.netmail_misc&NMAIL_KILL)
+							msg.hdr.netattr |= MSG_KILLSENT;
 						char* tp = strchr(rcpt_name, '@');
 						if(tp != NULL)
 							*tp = 0;
@@ -5787,7 +5791,8 @@ static void sendmail_thread(void* arg)
 			lprintf(LOG_INFO,"%04d %s message transfer complete (%lu bytes, %lu lines)", sock, prot, bytes, lines);
 
 			/* Now lets mark this message for deletion without corrupting the index */
-			msg.hdr.attr|=MSG_DELETE;
+			if((msg.hdr.netattr & MSG_KILLSENT) || msg.from_ext == NULL)
+				msg.hdr.attr|=MSG_DELETE;
 			msg.hdr.netattr|=MSG_SENT;
 			msg.hdr.netattr&=~MSG_INTRANSIT;
 			if((i=smb_updatemsg(&smb,&msg))!=SMB_SUCCESS)