Users don't know what they are doing most of the timeā€¦
[apps/madmutt.git] / send.c
diff --git a/send.c b/send.c
index 2143f19..4d5cd09 100644 (file)
--- a/send.c
+++ b/send.c
 
 #include "remailer.h"
 
+int url_parse_mailto(ENVELOPE *e, char **body, const char *src)
+{
+    char *t;
+    char *tmp;
+    char *headers;
+    char *tag, *value;
+    char scratch[HUGE_STRING];
+
+    int taglen;
+
+    string_list_t **last = &e->userhdrs;
+
+    if (!(t = strchr (src, ':')))
+        return -1;
+
+    if ((tmp = m_strdup(t + 1)) == NULL)
+        return -1;
+
+    if ((headers = strchr (tmp, '?')))
+        *headers++ = '\0';
+
+    url_decode(tmp);
+    e->to = rfc822_parse_adrlist(e->to, tmp);
+
+    tag = headers ? strtok (headers, "&") : NULL;
+
+    for (; tag; tag = strtok(NULL, "&")) {
+        if ((value = strchr (tag, '=')))
+            *value++ = '\0';
+        if (!value || !*value)
+            continue;
+
+        url_decode (tag);
+        url_decode (value);
+
+        if (mime_which_token(tag, -1) == MIME_BODY) {
+            if (body)
+                m_strreplace(body, value);
+        } else {
+#define SAFEPFX (option(OPTSTRICTMAILTO) ? "" : "X-Mailto-")
+            taglen = m_strlen(tag) + strlen(SAFEPFX);
+            /* mutt_parse_rfc822_line makes some assumptions */
+            snprintf(scratch, sizeof(scratch), "%s%s: %s", SAFEPFX, tag, value);
+#undef SAVEPFX
+            scratch[taglen] = '\0';
+            value = vskipspaces(&scratch[taglen + 1]);
+            last  = mutt_parse_rfc822_line (e, NULL, scratch, value, 0, 0, last);
+            /* if $strict_mailto is set, force editing headers to let
+             * users have a look at what we got */
+            if (!option (OPTSTRICTMAILTO)) {
+                set_option (OPTXMAILTO);
+                set_option (OPTEDITHDRS);
+            }
+        }
+    }
+
+    p_delete(&tmp);
+    return 0;
+}
 static void append_signature (FILE * f)
 {
   FILE *tmpfp;
@@ -965,14 +1024,14 @@ address_t *mutt_default_from (void)
 
   if (From)
     adr = address_dup(From);
-  else if (option (OPTUSEDOMAIN)) {
+  else if (MCore.use_domain) {
     const char *fqdn = mutt_fqdn (1);
     adr = address_new();
-    adr->mailbox = p_new(char, m_strlen(Username) + m_strlen(fqdn) + 2);
-    sprintf(adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn));
+    adr->mailbox = p_new(char, m_strlen(MCore.username) + m_strlen(fqdn) + 2);
+    sprintf(adr->mailbox, "%s@%s", NONULL(MCore.username), NONULL(fqdn));
   } else {
     adr = address_new ();
-    adr->mailbox = m_strdup(NONULL(Username));
+    adr->mailbox = m_strdup(NONULL(MCore.username));
   }
 
   return (adr);
@@ -985,7 +1044,7 @@ static int send_message (HEADER * msg)
   int i;
 
   /* Write out the message in MIME form. */
-  tempfp = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL);
+  tempfp = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
   if (!tempfp)
     return -1;
 
@@ -1183,7 +1242,7 @@ int ci_send_message (int flags, /* send mode */
 
     if (!tempfile) {
       char buffer[_POSIX_PATH_MAX];
-      tempfp = m_tempfile(buffer, sizeof(buffer), NONULL(Tempdir), NULL);
+      tempfp = m_tempfile(buffer, sizeof(buffer), NONULL(MCore.tmpdir), NULL);
       msg->content->filename = m_strdup(buffer);
     } else {
       tempfp = safe_fopen(tempfile, "a+");
@@ -1290,16 +1349,12 @@ int ci_send_message (int flags, /* send mode */
     if (option (OPTHDRS))
       process_user_header (msg->env);
 
-
-    if (option (OPTSIGONTOP) && (!(flags & SENDKEY)))
-      append_signature (tempfp);
-
     /* include replies/forwarded messages, unless we are given a template */
     if (!tempfile && (ctx || !(flags & (SENDREPLY | SENDFORWARD)))
         && generate_body (tempfp, msg, flags, ctx, cur) == -1)
       goto cleanup;
 
-    if (!option (OPTSIGONTOP) && (!(flags & SENDKEY)))
+    if (!(flags & SENDKEY))
       append_signature (tempfp);
 
     /*