By setting $reverse_envelopeto the reverse_name functionality is extended to also search the Envelope-To: and X-Envelope-To: headers when looking for a suitable From: address. --- Hello, mutt developers! This is a feature which has been talked about at least three times, but was never implemented. Since I didn't dare to change the default behaviour, this change is only active when $reverse_envelopeto is set in e.g. muttrc. In one of the earlier discussions, the "Delivered-To:" header came up, but I have deliberately _not_ included it, because in the mails I've analyzed this points to the mailing list's address.
https://marc.info/?l=mutt-dev&m=105521847425877&w=2 https://marc.info/?l=mutt-dev&m=124474341901084&w=2 https://marc.info/?l=mutt-users&m=145645204904724&w=2 I'd love to hear your feedback (and to have this merged, of course) ;-) greetings, tobias PS: I'm sorry if this mail reaches you twice, I wasn't subscribed to the list at first. contrib/sample.muttrc | 1 + init.h | 8 ++++++++ mutt.h | 2 ++ send.c | 17 ++++++++++++++--- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/contrib/sample.muttrc b/contrib/sample.muttrc index be264466..142c33c4 100644 --- a/contrib/sample.muttrc +++ b/contrib/sample.muttrc @@ -79,6 +79,7 @@ set reply_to # always use reply-to if present #set reverse_alias # attempt to look up my names for people set reverse_name # use my address as it appears in the message # i am replying to +#set reverse_envelopeto # also look in {,X-}Envelope-To for reverse_name set nosave_empty # remove files when no messages are left #set save_name # save outgoing messages by recipient, if the #set sendmail="/usr/lib/sendmail -oi -oem" # how to deliver mail diff --git a/init.h b/init.h index dcb157f0..eb31e797 100644 --- a/init.h +++ b/init.h @@ -2932,6 +2932,14 @@ struct option_t MuttVars[] = { ** possibly including eventual real names. When it is \fIunset\fP, mutt will ** override any such real names with the setting of the $$realname variable. */ + { "reverse_envelopeto", DT_BOOL, R_BOTH, OPTREVENVELOPETO, 0 }, + /* + ** .pp + ** This variable fine-tunes the behavior of the $$reverse_name feature. + ** When it is \fIset\fP, mutt will check the \fIEnvelope-to:\fP and + ** \fIX-Envelope-to:\fP ** headers, in addition to \fITo:\fP, \fICC:\fP and + ** \fIFrom:\fP. + */ { "rfc2047_parameters", DT_BOOL, R_NONE, OPTRFC2047PARAMS, 0 }, /* ** .pp diff --git a/mutt.h b/mutt.h index 71b66657..aada2ae7 100644 --- a/mutt.h +++ b/mutt.h @@ -488,6 +488,7 @@ enum OPTREVALIAS, OPTREVNAME, OPTREVREAL, + OPTREVENVELOPETO, OPTRFC2047PARAMS, OPTSAVEADDRESS, OPTSAVEEMPTY, @@ -671,6 +672,7 @@ typedef struct envelope ADDRESS *sender; ADDRESS *reply_to; ADDRESS *mail_followup_to; + ADDRESS *envelope_to; char *list_post; /* this stores a mailto URL, or nothing */ char *subject; char *real_subj; /* offset of the real subject */ diff --git a/send.c b/send.c index 7c1460c3..cd32eff0 100644 --- a/send.c +++ b/send.c @@ -1037,10 +1037,21 @@ static ADDRESS *set_reverse_name (ENVELOPE *env) { ADDRESS *tmp; - for (tmp = env->to; tmp; tmp = tmp->next) + if (option (OPTREVENVELOPETO)) { - if (mutt_addr_is_user (tmp)) - break; + for (tmp = env->envelope_to; tmp; tmp = tmp->next) + { + if (mutt_addr_is_user (tmp)) + break; + } + } + if (!tmp) + { + for (tmp = env->to; tmp; tmp = tmp->next) + { + if (mutt_addr_is_user (tmp)) + break; + } } if (!tmp) { -- 2.20.1