diff --git a/src/sbbs3/qwktomsg.cpp b/src/sbbs3/qwktomsg.cpp
index baa9e63fd8538c09e94cb5658c3d8b32aa3a1018..bdc6aa5b4b6c26d68eb5090080871b28ede8a9f6 100644
--- a/src/sbbs3/qwktomsg.cpp
+++ b/src/sbbs3/qwktomsg.cpp
@@ -487,6 +487,24 @@ bool sbbs_t::qwk_import_msg(FILE *qwk_fp, char *hdrblk, ulong blocks
 	body[bodylen]=0;
 	tail[taillen]=0;
 
+	if(msg->ftn_charset == NULL) {
+		if(!(msg->hdr.auxattr & MSG_HFIELDS_UTF8)
+			&& (msg->to != NULL && !str_is_ascii(msg->to) && utf8_str_is_valid(msg->to))
+				|| (msg->from != NULL && !str_is_ascii(msg->from) && utf8_str_is_valid(msg->from))
+				|| (msg->subj != NULL && !str_is_ascii(msg->subj) && utf8_str_is_valid(msg->subj)))
+			msg->hdr.auxattr |= MSG_HFIELDS_UTF8;
+		if(!(msg->hdr.auxattr & MSG_HFIELDS_UTF8) && !str_is_ascii(body) && utf8_str_is_valid(body))
+			msg->hdr.auxattr |= MSG_HFIELDS_UTF8;
+		if(!(msg->hdr.auxattr & MSG_HFIELDS_UTF8) && !str_is_ascii(tail) && utf8_str_is_valid(tail))
+			msg->hdr.auxattr |= MSG_HFIELDS_UTF8;
+		const char* charset = FIDO_CHARSET_CP437;
+		if(msg->hdr.auxattr & MSG_HFIELDS_UTF8)
+			charset = FIDO_CHARSET_UTF8;
+		else if(str_is_ascii(body) && str_is_ascii(tail))
+			charset = FIDO_CHARSET_ASCII;
+		smb_hfield_str(msg, FIDOCHARSET, charset);
+	}
+
 	if(online==ON_REMOTE)
 		bputs(text[WritingIndx]);