Add "Default-From" config option
[mmh] / uip / spost.c
index 476227b..48f9797 100644 (file)
@@ -56,6 +56,7 @@ static struct swit switches[] = {
 #define MVIS  0x0008  /* we've seen sighted addrs */
 #define MINV  0x0010  /* we've seen blind addrs */
 #define MRDT  0x0020  /* we've seen a Resent-Date: */
+#define MFMM  0x0040  /* The Mail is From a Alternative-Mailbox Addresse */
 
 struct headers {
        char *value;
@@ -411,6 +412,21 @@ putfmt(char *name, char *str, FILE *out)
        ** -- meillo@marmaro.de  2012-02
        */
 
+       if (hdr->set & MFRM) {
+
+               struct mailname *mp = NULL;
+
+               /* This is need because the addresse parser hold global state */
+               ismymbox(NULL);
+
+               while ((cp = getname(str)) != NULL) {
+                       mp = getm(cp, NULL, 0, AD_NAME, NULL);
+                       if (ismymbox(mp)) {
+                               msgflags |= MFMM;
+                       }
+               }
+       }
+
        if (hdr->flags & HSUB) {
                subject = getcpy(str);
        }
@@ -433,11 +449,15 @@ finish_headers(FILE *out)
                fprintf(out, "%sDate: %s\n", resentstr, dtimenow());
        }
 
-       snprintf(from, sizeof(from), "%s@%s", getusername(), LocalName());
-       if ((cp = getfullname()) && *cp) {
-               snprintf(signature, sizeof(signature), "%s <%s>", cp, from);
+       if ((cp = context_find("Default-From")) != NULL) {
+               snprintf(signature, sizeof(signature), "%s", cp);
        } else {
-               snprintf(signature, sizeof(signature), "%s", from);
+               snprintf(from, sizeof(from), "%s@%s", getusername(), LocalName());
+               if ((cp = getfullname()) && *cp) {
+                       snprintf(signature, sizeof(signature), "%s <%s>", cp, from);
+               } else {
+                       snprintf(signature, sizeof(signature), "%s", from);
+               }
        }
        if (!(msgflags & MFRM)) {
                fprintf(out, "%sFrom: %s\n", resentstr, signature);
@@ -446,7 +466,9 @@ finish_headers(FILE *out)
                ** Add a Sender: header because the From: header could
                ** be fake or contain multiple addresses.
                */
-               fprintf(out, "%sSender: %s\n", resentstr, from);
+               if (!(msgflags & MFMM)) {
+                       fprintf(out, "%sSender: %s\n", resentstr, signature);
+               }
        }
        if (!(msgflags & MVIS)) {
                fprintf(out, "%sBcc: undisclosed-recipients:;\n", resentstr);