diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index c9637635ab1ce06b6b456c4c9e4989527d2f80ef..3f91b74b18ad354c5284398e2e5eb407e2a06530 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -681,7 +681,7 @@ public: bool msgabort(void); bool email(int usernumber, const char *top = NULL, const char *title = NULL , long mode = WM_NONE, smb_t* resmb = NULL, smbmsg_t* remsg = NULL); - bool forwardmail(smbmsg_t* msg, const char* to, const char* comment = NULL); + bool forwardmail(smbmsg_t* msg, const char* to, const char* subject = NULL, const char* comment = NULL); void removeline(char *str, char *str2, char num, char skip); ulong msgeditor(char *buf, const char *top, char *title); bool editfile(char *path, bool msg=false); diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp index 0b11baa581c843e99b4c680db4b2a76664bcdb4f..f23d137d0d9f0e1e4afad35320664006d8426e2e 100644 --- a/src/sbbs3/writemsg.cpp +++ b/src/sbbs3/writemsg.cpp @@ -1331,10 +1331,11 @@ bool sbbs_t::copyfattach(uint to, uint from, const char* subj) /* If comment is NULL, comment lines will be prompted for. */ /* If comment is a zero-length string, no comments will be included. */ /****************************************************************************/ -bool sbbs_t::forwardmail(smbmsg_t* orgmsg, const char* to, const char* comment) +bool sbbs_t::forwardmail(smbmsg_t* orgmsg, const char* to, const char* subject, const char* comment) { char str[256],touser[128]; char tmp[512]; + char subj[LEN_TITLE + 1]; int result; smbmsg_t msg; node_t node; @@ -1372,13 +1373,21 @@ bool sbbs_t::forwardmail(smbmsg_t* orgmsg, const char* to, const char* comment) return false; } + if(subject == NULL) { + subject = subj; + SAFECOPY(subj, orgmsg->subj); + bputs(text[SubjectPrompt]); + if(!getstr(subj, sizeof(subj) - 1, K_LINE | K_EDIT | K_AUTODEL | K_TRIM)) + return false; + } + memset(&msg, 0, sizeof(msg)); msg.hdr.auxattr = orgmsg->hdr.auxattr & (MSG_HFIELDS_UTF8 | MSG_MIMEATTACH); msg.hdr.when_imported.time = time32(NULL); msg.hdr.when_imported.zone = sys_timezone(&cfg); msg.hdr.when_written = msg.hdr.when_imported; - smb_hfield_str(&msg, SUBJECT, orgmsg->subj); + smb_hfield_str(&msg, SUBJECT, subject); add_msg_ids(&cfg, &smb, &msg, orgmsg); smb_hfield_str(&msg,SENDER,useron.alias); @@ -1396,15 +1405,29 @@ bool sbbs_t::forwardmail(smbmsg_t* orgmsg, const char* to, const char* comment) smb_hfield_str(&msg, RECIPIENTEXT,str); } else { SAFECOPY(touser, to); - char* addr = touser; - char* p = strchr(addr, '@'); - if(net_type != NET_INTERNET && p != NULL) - addr = p + 1; - smb_hfield_netaddr(&msg, RECIPIENTNETADDR, addr, NULL); - if(p != NULL) + char* p; + if((p = strchr(touser, '@')) != NULL) *p = '\0'; smb_hfield_str(&msg, RECIPIENT, touser); SAFECOPY(touser, to); + const char* addr = touser; + if(net_type != NET_INTERNET && p != NULL) + addr = p + 1; + char fulladdr[128]; + if(net_type == NET_QWK) { + usernumber = qwk_route(&cfg, addr, fulladdr, sizeof(fulladdr) - 1); + if(*fulladdr == '\0') { + bprintf(text[InvalidNetMailAddr], addr); + smb_freemsgmem(&msg); + return false; + } + addr = fulladdr; + SAFEPRINTF(str, "%u", usernumber); + smb_hfield_str(&msg, RECIPIENTEXT, str); + usernumber = 0; + } + smb_hfield_bin(&msg, RECIPIENTNETTYPE, net_type); + smb_hfield_netaddr(&msg, RECIPIENTNETADDR, addr, &net_type); } if(orgmsg->mime_version != NULL) { safe_snprintf(str, sizeof(str), "MIME-Version: %s", orgmsg->mime_version);