Add existing "From:" to Bcc-ed messages.
[mmh] / uip / spost.c
index 780b5f4..4a24fc4 100644 (file)
@@ -117,6 +117,7 @@ static enum {
 static char *tmpfil;
 
 static char *subject = NULL;  /* the subject field for BCC'ing */
+static struct mailname *from = NULL;  /* the from field for BCC'ing */
 static char fccs[BUFSIZ] = "";
 struct mailname *bccs = NULL;  /* list of the bcc recipients */
 struct mailname *recipients = NULL;  /* list of the recipients */
@@ -435,11 +436,11 @@ putfmt(char *name, char *str, FILE *out)
                /* needed because the address parser holds global state */
                ismymbox(NULL);
 
-               for ( mp = addr_start.m_next; mp; mp = mp->m_next) {
+               for (mp = addr_start.m_next; mp; mp = mp->m_next) {
                        if (ismymbox(mp)) {
                                msgflags |= MFMM;
                                if (my == NULL) {
-                                       my = mp;
+                                       from = my = mp;
                                }
                        }
                }
@@ -535,6 +536,7 @@ static void
 putadr(char *name, struct mailname *nl)
 {
        struct mailname *mp;
+       char *cp;
        int linepos;
        int namelen;
 
@@ -547,7 +549,17 @@ putadr(char *name, struct mailname *nl)
                        fprintf(out, "\n%s: ", name);
                        linepos = namelen;
                }
-               linepos = putone(mp->m_text, linepos, namelen);
+               if (mp->m_ingrp) {
+                       if (mp->m_gname != NULL) {
+                               cp = getcpy(mp->m_gname);
+                               cp = add(";", cp);
+                               linepos = putone(cp, linepos, namelen);
+                               free(cp);
+                               cp = NULL;
+                       }
+               } else {
+                       linepos = putone(mp->m_text, linepos, namelen);
+               }
                mp = mp->m_next;
        }
        putc('\n', out);
@@ -656,6 +668,9 @@ process_bccs(char *origmsg)
        for (mp=bccs; mp; mp=mp->m_next) {
                bccdraft = getcpy(m_mktemp2("/tmp/", invo_name, NULL, &out));
                fprintf(out, "To: %s\n", mp->m_text);
+               if (from) {
+                       fprintf(out, "From: %s\n", from->m_text);
+               }
                fprintf(out, "Subject: [BCC] %s", subject ? subject : "");
                fprintf(out, "%s: %s\n", attach_hdr, origmsg);
                fprintf(out, "------------\n");