diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c
index 0f523c6d208067ff591d6f12c1204166904286cd..ced5c0722f7954b715d0d7e9d0de384f5adc08e7 100644
--- a/src/sbbs3/smbutil.c
+++ b/src/sbbs3/smbutil.c
@@ -217,6 +217,8 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 	msg.hdr.when_written.zone=tzone;
 	msg.hdr.when_imported=msg.hdr.when_written;
 
+	if((to==NULL || stricmp(to,"All")==0) && to_address!=NULL)
+		to=to_address;
 	if(to==NULL) {
 		printf("To User Name: ");
 		fgets(str,sizeof(str),stdin); 
@@ -232,36 +234,30 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 	if(type=='E' || type=='N')
 		smb.status.attr|=SMB_EMAIL;
 	if(smb.status.attr&SMB_EMAIL) {
-		if(to_number==NULL) {
-			printf("To User Number (0=QWKnet or Internet): ");
-			gets(str);
-		} else
-			SAFECOPY(str,to_number);
-		truncsp(str);
-		if((i=smb_hfield_str(&msg,RECIPIENTEXT,str))!=SMB_SUCCESS) {
-			fprintf(errfp,"\n%s!smb_hfield_str(0x%02X) returned %d: %s\n"
-				,beep,RECIPIENTEXT,i,smb.last_error);
-			bail(1); 
+		if(to_address==NULL) {
+			if(to_number==NULL) {
+				printf("To User Number: ");
+				gets(str);
+			} else
+				SAFECOPY(str,to_number);
+			truncsp(str);
+			if((i=smb_hfield_str(&msg,RECIPIENTEXT,str))!=SMB_SUCCESS) {
+				fprintf(errfp,"\n%s!smb_hfield_str(0x%02X) returned %d: %s\n"
+					,beep,RECIPIENTEXT,i,smb.last_error);
+				bail(1); 
+			}
 		}
-		msg.idx.to=atoi(str); 
-	}
-	else {
-		strlwr(str);
-		msg.idx.to=crc16(str,0); 
 	}
 
-	if(smb.status.attr&SMB_EMAIL && (type=='N' || !msg.idx.to)) {
+	if(smb.status.attr&SMB_EMAIL && (type=='N' || to_address!=NULL)) {
 		if(to_address==NULL) {
-			printf("To Address: ");
+			printf("To Address (e.g. user@host): ");
 			gets(str);
 		} else
 			SAFECOPY(str,to_address);
 		truncsp(str);
 		if(*str) {
-			if(strchr(str,'.'))
-				net=NET_INTERNET;
-			else
-				net=NET_QWK;
+			net=smb_netaddr_type(str);
 			if((i=smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(net),&net))!=SMB_SUCCESS) {
 				fprintf(errfp,"\n%s!smb_hfield(0x%02X) returned %d: %s\n"
 					,beep,RECIPIENTNETTYPE,i,smb.last_error);
@@ -298,10 +294,6 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 				,beep,SENDEREXT,i,smb.last_error);
 			bail(1); 
 		}
-		msg.idx.from=atoi(str); 
-	} else {
-		strlwr(str);
-		msg.idx.from=crc16(str,0); 
 	}
 	if((i=smb_hfield(&msg, SENDERAGENT, sizeof(agent), &agent))!=SMB_SUCCESS) {
 		fprintf(errfp,"\n%s!smb_hfield(0x%02X) returned %d: %s\n"
@@ -320,7 +312,6 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 			,beep,SUBJECT,i,smb.last_error);
 		bail(1); 
 	}
-	msg.idx.subj=smb_subject_crc(str);
 
 	safe_snprintf(str,sizeof(str),"SMBUTIL %s-%s r%s %s %s"
 		,SMBUTIL_VER