From 4c0908b0e574854756b5fb2e17fb6ab056e0b387 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sat, 10 Jul 2004 18:44:35 +0000 Subject: [PATCH] Fixed email replies --- ChangeLog | 3 + mbsebbs/email.c | 258 +++++++++++++++++++++++------------------------- 2 files changed, 129 insertions(+), 132 deletions(-) diff --git a/ChangeLog b/ChangeLog index d719f1d4..569ff57e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -38,6 +38,9 @@ v0.61.1 20-Jun-2004. If pop3 login fails, the bbs won't hang. If a users homedirectory doesn't exist, a correct error message is displayed and logged. + If a user replied to a email and the system was in Own + maildomain mode, the From address was changed to the Fidonet + style address instead of Unix address. mbsetup: Added user@domain login for pop3 servers in screen 1.12. diff --git a/mbsebbs/email.c b/mbsebbs/email.c index 68c7f9f2..061cb30a 100644 --- a/mbsebbs/email.c +++ b/mbsebbs/email.c @@ -650,153 +650,147 @@ void Read_Email(void) */ void Reply_Email(int IsReply) { - int i, j, x; - char to[65]; - char from[65]; - char subj[72]; - char msgid[81]; - char replyto[81]; - char replyaddr[81]; - char *tmp, *buf; - char qin[9]; - faddr *Dest = NULL; + int i, j, x; + char to[65], from[65], subj[72], msgid[81], replyto[81], replyaddr[81], *tmp, *buf, qin[9]; + faddr *Dest = NULL; - sprintf(from, "%s", Msg.To); - sprintf(to, "%s", Msg.From); - sprintf(replyto, "%s", Msg.ReplyTo); - sprintf(replyaddr, "%s", Msg.ReplyAddr); + sprintf(from, "%s", Msg.To); + sprintf(to, "%s", Msg.From); + sprintf(replyto, "%s", Msg.ReplyTo); + sprintf(replyaddr, "%s", Msg.ReplyAddr); - if (strncasecmp(Msg.Subject, "Re:", 3) && IsReply) { - sprintf(subj, "Re: %s", Msg.Subject); - } else { - sprintf(subj, "%s", Msg.Subject); - } - Syslog('m', "Reply msg to %s, subject %s", to, subj); - Syslog('m', "Msgid was %s", Msg.Msgid); - sprintf(msgid, "%s", Msg.Msgid); + if (strncasecmp(Msg.Subject, "Re:", 3) && IsReply) { + sprintf(subj, "Re: %s", Msg.Subject); + } else { + sprintf(subj, "%s", Msg.Subject); + } + Syslog('m', "Reply msg to %s, subject %s", to, subj); + Syslog('m', "Msgid was %s", Msg.Msgid); + sprintf(msgid, "%s", Msg.Msgid); - x = 0; - Line = 1; - WhosDoingWhat(READ_POST, NULL); - clear(); - colour(1,7); - printf(" %-71s", sMailbox); - colour(4,7); - printf("#%-5lu", EmailBase.Highest + 1); + x = 0; + Line = 1; + WhosDoingWhat(READ_POST, NULL); + clear(); + colour(1,7); + printf(" %-71s", sMailbox); + colour(4,7); + printf("#%-5lu", EmailBase.Highest + 1); - colour(CFG.HiliteF, CFG.HiliteB); - sLine(); + colour(CFG.HiliteF, CFG.HiliteB); + sLine(); - for (i = 0; i < (TEXTBUFSIZE + 1); i++) - Message[i] = (char *) calloc(MAX_LINE_LENGTH +1, sizeof(char)); - Line = 1; - Msg_New(); + for (i = 0; i < (TEXTBUFSIZE + 1); i++) + Message[i] = (char *) calloc(MAX_LINE_LENGTH +1, sizeof(char)); + Line = 1; + Msg_New(); - sprintf(Msg.Replyid, "%s", msgid); - sprintf(Msg.ReplyTo, "%s", replyto); - sprintf(Msg.ReplyAddr, "%s", replyaddr); - - /* From : */ - pout(14, 0, (char *) Language(209)); - if (CFG.EmailMode != E_PRMISP) { - /* - * If not permanent connected to the internet, use fidonet.org style addressing. - */ - Dest = fido2faddr(CFG.EmailFidoAka); - sprintf(Msg.From, "%s@%s (%s)", exitinfo.sUserName, ascinode(Dest, 0x2f), exitinfo.sUserName); - } else - sprintf(Msg.From, "%s@%s (%s)", exitinfo.sUserName, CFG.sysdomain, exitinfo.sUserName); - for (i = 0; i < strlen(Msg.From); i++) { - if (Msg.From[i] == ' ') - Msg.From[i] = '_'; - if (Msg.From[i] == '@') - break; - } - pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.From); - Enter(1); - Syslog('b', "Setting From: %s", Msg.From); - - /* To : */ - sprintf(Msg.To, "%s", to); - pout(14, 0, (char *) Language(208)); - pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.To); - Enter(1); - - /* Enter to keep Subject. */ - pout(12, 0, (char *) Language(219)); - Enter(1); - /* Subject : */ - pout(14, 0, (char *) Language(210)); - sprintf(Msg.Subject, "%s", subj); - pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.Subject); - - x = strlen(subj); - fflush(stdout); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - GetstrP(subj, 50, x); - fflush(stdout); - - if (strlen(subj)) - strcpy(Msg.Subject, subj); - - Msg.Private = TRUE; - Enter(1); - -// Check_Attach(); + sprintf(Msg.Replyid, "%s", msgid); + sprintf(Msg.ReplyTo, "%s", replyto); + sprintf(Msg.ReplyAddr, "%s", replyaddr); + /* From : */ + pout(14, 0, (char *) Language(209)); + if (CFG.EmailMode != E_PRMISP) { /* - * Quote original message now, format the original users - * initials into qin. If its a name@system.dom the use the - * first 8 characters of the name part. + * If not permanent connected to the internet, use fidonet.org style addressing. */ - sprintf(Message[1], "%s wrote to %s:", to, from); - memset(&qin, 0, sizeof(qin)); - if (strchr(to, '@')) { - tmp = xstrcpy(strtok(to, "@")); - tmp[8] = '\0'; - sprintf(qin, "%s", tmp); - free(tmp); - } else { - x = TRUE; - j = 0; - for (i = 0; i < strlen(to); i++) { - if (x && isalpha(to[i])) { - qin[j] = to[i]; - j++; - x = FALSE; - } - if (to[i] == ' ' || to[i] == '.') - x = TRUE; - if (j == 6) - break; - } - } + Dest = fido2faddr(CFG.EmailFidoAka); + sprintf(Msg.From, "%s@%s (%s)", exitinfo.sUserName, ascinode(Dest, 0x2f), exitinfo.sUserName); + } else { + sprintf(Msg.From, "%s@%s (%s)", exitinfo.Name, CFG.sysdomain, exitinfo.sUserName); + } + for (i = 0; i < strlen(Msg.From); i++) { + if (Msg.From[i] == ' ') + Msg.From[i] = '_'; + if (Msg.From[i] == '@') + break; + } + pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.From); + Enter(1); + Syslog('b', "Setting From: %s", Msg.From); - Line = 2; - tmp = calloc(128, sizeof(char)); - buf = calloc(128, sizeof(char)); + /* To : */ + sprintf(Msg.To, "%s", to); + pout(14, 0, (char *) Language(208)); + pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.To); + Enter(1); - sprintf(tmp, "%s/%s/.quote", CFG.bbs_usersdir, exitinfo.Name); - if ((qf = fopen(tmp, "r")) != NULL) { - while ((fgets(buf, 128, qf)) != NULL) { - Striplf(buf); - sprintf(Message[Line], "%s> %s", (char *)qin, buf); - Line++; - if (Line == TEXTBUFSIZE) - break; - } - fclose(qf); - } else - WriteError("$Can't read %s", tmp); + /* Enter to keep Subject. */ + pout(12, 0, (char *) Language(219)); + Enter(1); + /* Subject : */ + pout(14, 0, (char *) Language(210)); + sprintf(Msg.Subject, "%s", subj); + pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.Subject); - free(buf); + x = strlen(subj); + fflush(stdout); + colour(CFG.MsgInputColourF, CFG.MsgInputColourB); + GetstrP(subj, 50, x); + fflush(stdout); + + if (strlen(subj)) + strcpy(Msg.Subject, subj); + + Msg.Private = TRUE; + Enter(1); + +// Check_Attach(); + + /* + * Quote original message now, format the original users + * initials into qin. If its a name@system.dom the use the + * first 8 characters of the name part. + */ + sprintf(Message[1], "%s wrote to %s:", to, from); + memset(&qin, 0, sizeof(qin)); + if (strchr(to, '@')) { + tmp = xstrcpy(strtok(to, "@")); + tmp[8] = '\0'; + sprintf(qin, "%s", tmp); free(tmp); + } else { + x = TRUE; + j = 0; + for (i = 0; i < strlen(to); i++) { + if (x && isalpha(to[i])) { + qin[j] = to[i]; + j++; + x = FALSE; + } + if (to[i] == ' ' || to[i] == '.') + x = TRUE; + if (j == 6) + break; + } + } - if (Edit_Msg()) - Save_Email(IsReply); + Line = 2; + tmp = calloc(128, sizeof(char)); + buf = calloc(128, sizeof(char)); - for (i = 0; i < (TEXTBUFSIZE + 1); i++) - free(Message[i]); + sprintf(tmp, "%s/%s/.quote", CFG.bbs_usersdir, exitinfo.Name); + if ((qf = fopen(tmp, "r")) != NULL) { + while ((fgets(buf, 128, qf)) != NULL) { + Striplf(buf); + sprintf(Message[Line], "%s> %s", (char *)qin, buf); + Line++; + if (Line == TEXTBUFSIZE) + break; + } + fclose(qf); + } else + WriteError("$Can't read %s", tmp); + + free(buf); + free(tmp); + + if (Edit_Msg()) + Save_Email(IsReply); + + for (i = 0; i < (TEXTBUFSIZE + 1); i++) + free(Message[i]); }