From cd447d368334569fb34e88336fc2419e44483a97 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sun, 24 Mar 2019 08:54:02 +0000
Subject: [PATCH] Support netmail addresses (e.g. Internet e-mail addresses)
 longer than the 35 character limit imposed by FidoNet message "to" fields, in
 sbbs_t::netmail(). Use the regarding-message from_net field when a 'to' field
 is not passed to sbbs_t::netmail()

---
 src/sbbs3/fido.cpp | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/sbbs3/fido.cpp b/src/sbbs3/fido.cpp
index 638d79ebe2..42e2a64d3f 100644
--- a/src/sbbs3/fido.cpp
+++ b/src/sbbs3/fido.cpp
@@ -103,7 +103,7 @@ bool sbbs_t::lookup_netuser(char *into)
 bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resmb, smbmsg_t* remsg)
 {
 	char	str[256],fname[128],*buf,*p,ch;
-	char	to[FIDO_NAME_LEN] = "";
+	char	to[256] = "";
 	char	from[FIDO_NAME_LEN]= "";
 	char	subj[FIDO_SUBJ_LEN]= "";
 	char	msgpath[MAX_PATH+1];
@@ -135,10 +135,17 @@ bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resm
 	if(remsg != NULL) {
 		if(subj[0] == 0 && remsg->subj != NULL)
 			SAFECOPY(subj, remsg->subj);
-		if(to[0] == 0 && remsg->from != NULL)
-			SAFECOPY(to, remsg->from);
-//		if(addr[0] == 0 && remsg->from_net.addr != NULL)
-//			smb_netaddrstr(&remsg->from_net, addr);
+		if(to[0] == 0) {
+			if((p = smb_netaddrstr(&remsg->from_net, tmp)) != NULL) {
+				if(strchr(p, '@')) {
+					SAFECOPY(to, p);
+				} else {
+					SAFEPRINTF2(to, "%s@%s", remsg->from, p);
+				}
+			} else {
+				SAFECOPY(to, remsg->from);
+			}
+		}
 	}
 
 	lookup_netuser(to);
@@ -162,7 +169,7 @@ bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resm
 			bputs(text[EmailFilesNotAllowed]);
 			mode&=~WM_FILE;
 		}
-		return inetmail(into, title, mode, resmb, remsg);
+		return inetmail(to, title, mode, resmb, remsg);
 	}
 	p=strrchr(to,'@');      /* Find '@' in name@addr */
 	if(p==NULL || net_type != NET_FIDO) {
@@ -234,7 +241,7 @@ bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resm
 	}
 
 	msg_tmp_fname(useron.xedit, msgpath, sizeof(msgpath));
-	if(!writemsg(msgpath,nulstr,subj,WM_NETMAIL|mode,INVALID_SUB, into, from, &editor)) {
+	if(!writemsg(msgpath,nulstr,subj,WM_NETMAIL|mode,INVALID_SUB, to, from, &editor)) {
 		bputs(text[Aborted]);
 		return(false); 
 	}
-- 
GitLab