]> granicus.if.org Git - mutt/commitdiff
Correct header encodings when postponing messages.
authorThomas Roessler <roessler@does-not-exist.org>
Tue, 7 Mar 2000 11:13:38 +0000 (11:13 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Tue, 7 Mar 2000 11:13:38 +0000 (11:13 +0000)
TODO
protos.h
send.c
sendlib.c

diff --git a/TODO b/TODO
index b3bd8d3d8615611e43400ae796b300255a84f61b..32cbf1f7ef420d3ee824f5e31e51e1b050d394fc 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,5 @@
 Problems are listed in approximate order of priority.
 
-- Fix postponing: Headers should be RFC2047 en- and de-coded.
 - character set support: We should have a global cache of
   character to file name mappings.
 
index 540f68baef8ed9d8a2edca70877f98d1f9cb6078..76daf732b4f1686ee91a63d0fb30943aa33bc1c4 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -175,7 +175,8 @@ void mutt_parse_mime_message (CONTEXT *ctx, HEADER *);
 void mutt_parse_part (FILE *, BODY *);
 void mutt_pipe_message_to_state (HEADER *, STATE *);
 void mutt_perror (const char *);
-void mutt_prepare_envelope (ENVELOPE *);
+void mutt_prepare_envelope (ENVELOPE *, int);
+void mutt_unprepare_envelope (ENVELOPE *);
 void mutt_pretty_mailbox (char *);
 void mutt_pretty_size (char *, size_t, long);
 void mutt_print_message (HEADER *);
diff --git a/send.c b/send.c
index 0b899cf32fb76f8a1064b457391af4e4e19ae6dc..202b4c63958635cb662e9205b1f0a4fec05bfc73 100644 (file)
--- a/send.c
+++ b/send.c
@@ -1324,9 +1324,14 @@ main_loop:
        */
       msg->read = 0; msg->old = 0;
 
+      encode_descriptions (msg->content, 1);
+      mutt_prepare_envelope (msg->env, 0);
+
       if (!Postponed || mutt_write_fcc (NONULL (Postponed), msg, (cur && (flags & SENDREPLY)) ? cur->env->message_id : NULL, 1, fcc) < 0)
       {
        msg->content = mutt_remove_multipart (msg->content);
+       decode_descriptions (msg->content);
+       mutt_unprepare_envelope (msg->env);
        goto main_loop;
       }
       mutt_update_num_postponed ();
@@ -1403,7 +1408,7 @@ main_loop:
   if (!option (OPTNOCURSES) && !(flags & SENDMAILX))
     mutt_message _("Sending message...");
 
-  mutt_prepare_envelope (msg->env);
+  mutt_prepare_envelope (msg->env, 1);
 
   /* save a copy of the message, if necessary. */
 
@@ -1522,6 +1527,8 @@ full_fcc:
       }
 #endif
       msg->content = mutt_remove_multipart (msg->content);
+      decode_descriptions (msg->content);
+      mutt_unprepare_envelope (msg->env);
       goto main_loop;
     }
     else
index 5f0493a2214c7bb67f340aa11c60508387616b42..4516792f25d93d742ed8ce774d975317e710b230 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -102,7 +102,7 @@ sysexits_h[] =
   { S_ERR, "Exec error." },
   { -1, NULL}
 };
-      
+
     
 #ifdef HAVE_PGP
 #include "pgp.h"
@@ -1786,28 +1786,35 @@ char *mutt_quote_string (const char *s)
   return (r);
 }
 
-void mutt_prepare_envelope (ENVELOPE *env)
+/* For postponing (!final) do the necessary encodings only */
+void mutt_prepare_envelope (ENVELOPE *env, int final)
 {
   char buffer[LONG_STRING];
 
-  if (env->bcc && !(env->to || env->cc))
+  if (final)
   {
-    /* some MTA's will put an Apparently-To: header field showing the Bcc:
-     * recipients if there is no To: or Cc: field, so attempt to suppress
-     * it by using an empty To: field.
-     */
-    env->to = rfc822_new_address ();
-    env->to->group = 1;
-    env->to->next = rfc822_new_address ();
+    if (env->bcc && !(env->to || env->cc))
+    {
+      /* some MTA's will put an Apparently-To: header field showing the Bcc:
+       * recipients if there is no To: or Cc: field, so attempt to suppress
+       * it by using an empty To: field.
+       */
+      env->to = rfc822_new_address ();
+      env->to->group = 1;
+      env->to->next = rfc822_new_address ();
 
-    buffer[0] = 0;
-    rfc822_cat (buffer, sizeof (buffer), "undisclosed-recipients",
-               RFC822Specials);
+      buffer[0] = 0;
+      rfc822_cat (buffer, sizeof (buffer), "undisclosed-recipients",
+                 RFC822Specials);
 
-    env->to->mailbox = safe_strdup (buffer);
-  }
+      env->to->mailbox = safe_strdup (buffer);
+    }
+
+    mutt_set_followup_to (env);
 
-  mutt_set_followup_to (env);
+    if (!env->message_id)
+      env->message_id = mutt_gen_msgid ();
+  }
 
   /* Take care of 8-bit => 7-bit conversion. */
   rfc2047_encode_adrlist (env->to);
@@ -1823,9 +1830,18 @@ void mutt_prepare_envelope (ENVELOPE *env)
     mutt_str_replace (&env->subject, buffer);
   }
   encode_headers (env->userhdrs);
+}
 
-  if (!env->message_id)
-    env->message_id = mutt_gen_msgid ();
+void mutt_unprepare_envelope (ENVELOPE *env)
+{
+  rfc822_free_address (&env->mail_followup_to);
+
+  /* back conversions */
+  rfc2047_decode_adrlist (env->to);
+  rfc2047_decode_adrlist (env->cc);
+  rfc2047_decode_adrlist (env->from);
+  rfc2047_decode_adrlist (env->reply_to);
+  rfc2047_decode (env->subject, env->subject, mutt_strlen (env->subject) + 1);
 }
 
 static void _mutt_bounce_message (FILE *fp, HEADER *h, ADDRESS *to, const char *resent_from)