<<< Date Index >>>     <<< Thread Index >>>

[PATCH] Allow send-hooks to effectively change $from and $use_from



Hi,

This patch modifies ci_send_message() so that send-hooks can modify
$from and $use_from.  This makes it possible for a send-hook to
provide a fallback address based on the recipient, without overriding
reverse_name.

Thanks,
Aron

# HG changeset patch
# User Aron Griffis <agriffis@xxxxxxxxx>
# Date 1183941141 14400
# Branch HEAD
# Node ID cd46bd8885a00c5b4458a7ff3e5b3766f9a0f045
# Parent  e3eeeb0a37a5fa8b197b8ef28a4ee3a6f22a36ef
Allow send-hooks to effectively change $from and $use_from

Signed-off-by: Aron Griffis <agriffis@xxxxxxxxx>

diff -r e3eeeb0a37a5 -r cd46bd8885a0 send.c
--- a/send.c    Sun Jul 08 20:31:58 2007 -0400
+++ b/send.c    Sun Jul 08 20:32:21 2007 -0400
@@ -1092,6 +1092,7 @@ ci_send_message (int flags,               /* send mod
   char fcc[_POSIX_PATH_MAX] = ""; /* where to copy this message */
   FILE *tempfp = NULL;
   BODY *pbody;
+  ADDRESS *default_from = NULL;
   int i, killfrom = 0;
   int fcc_error = 0;
   int free_clear_content = 0;
@@ -1216,7 +1217,7 @@ ci_send_message (int flags,               /* send mod
   }
 
   if (!msg->env->from && option (OPTUSEFROM) && !(flags & 
(SENDPOSTPONED|SENDRESEND)))
-    msg->env->from = mutt_default_from ();
+    msg->env->from = default_from = mutt_default_from ();
 
   if (flags & SENDBATCH) 
   {
@@ -1257,10 +1258,7 @@ ci_send_message (int flags,              /* send mod
      * after send-hooks are evaulated */
 
     if (!msg->env->from)
-    {
-      msg->env->from = mutt_default_from ();
-      killfrom = 1;
-    }
+      msg->env->from = default_from = mutt_default_from ();
 
     if ((flags & SENDREPLY) && cur)
     {
@@ -1287,10 +1285,19 @@ ci_send_message (int flags,             /* send mod
      */
     msg->replied = 0;
 
-    if (killfrom)
-    {
-      rfc822_free_address (&msg->env->from);
-      killfrom = 0;
+    /* $use_from and/or $from might have changed in a send-hook */
+    if (msg->env->from == default_from)
+    {
+      if (option (OPTUSEFROM))
+      {
+       rfc822_free_address (&msg->env->from);
+       msg->env->from = default_from = mutt_default_from ();
+      }
+      else
+      {
+       rfc822_free_address (&msg->env->from);
+       default_from = NULL;
+      }
     }
 
     if (option (OPTHDRS))