if (mutt_strcasecmp (addr->mailbox, Username) == 0)
return 1;
- if(string_is_address(addr->mailbox, Username, Hostname))
+ if (string_is_address(addr->mailbox, Username, Hostname))
return 1;
- if(string_is_address(addr->mailbox, Username, mutt_fqdn(0)))
+ if (string_is_address(addr->mailbox, Username, mutt_fqdn(0)))
return 1;
- if(string_is_address(addr->mailbox, Username, mutt_fqdn(1)))
+ if (string_is_address(addr->mailbox, Username, mutt_fqdn(1)))
+ return 1;
+
+ if (From && !mutt_strcasecmp (From->mailbox, addr->mailbox))
return 1;
if (Alternates.pattern &&
WHERE char *MuttDotlock;
#endif
+WHERE ADDRESS *From;
+
WHERE char *AliasFile;
WHERE char *AliasFmt;
WHERE char *AttachSep;
*((char **) p->data) = safe_strdup (path);
}
break;
+ case DT_ADDR:
+ if (p->init)
+ {
+ rfc822_free_address ((ADDRESS **) p->data);
+ *((ADDRESS **) p->data) = rfc822_parse_adrlist (NULL, (char *) p->init);
+ }
+ break;
case DT_BOOL:
if (p->init)
set_option (p->data);
set_option (MuttVars[idx].data);
}
else if (DTYPE (MuttVars[idx].type) == DT_STR ||
- DTYPE (MuttVars[idx].type) == DT_PATH)
+ DTYPE (MuttVars[idx].type) == DT_PATH ||
+ DTYPE (MuttVars[idx].type) == DT_ADDR)
{
if (query || *s->dptr != '=')
{
s->dptr++;
/* copy the value of the string */
- FREE (MuttVars[idx].data);
+ if (DTYPE (MuttVars[idx].type) == DT_ADDR)
+ rfc822_free_address ((ADDRESS **) MuttVars[idx].data);
+ else
+ FREE (MuttVars[idx].data);
+
mutt_extract_token (tmp, s, 0);
- if (MuttVars[idx].type == DT_PATH)
+ if (DTYPE (MuttVars[idx].type) == DT_PATH)
{
strfcpy (scratch, tmp->data, sizeof (scratch));
mutt_expand_path (scratch, sizeof (scratch));
*((char **) MuttVars[idx].data) = safe_strdup (scratch);
}
- else
+ else if (DTYPE (MuttVars[idx].type) == DT_STR)
{
*((char **) MuttVars[idx].data) = safe_strdup (tmp->data);
}
+ else
+ {
+ *((ADDRESS **) MuttVars[idx].data) = rfc822_parse_adrlist (NULL, tmp->data);
+ }
}
else if (DTYPE(MuttVars[idx].type) == DT_RX)
{
(DTYPE(MuttVars[idx].type) == DT_RX))
snprintf(pt, dlen, "%s\"%s\"", tmp,
NONULL (*((char **) MuttVars[idx].data)));
+ else if (DTYPE (MuttVars[idx].type) == DT_ADDR)
+ {
+ *pt = '\0';
+ rfc822_write_address (pt, dlen, *((ADDRESS **) MuttVars[idx].data));
+ }
else if (DTYPE (MuttVars[idx].type) == DT_QUAD)
snprintf(pt, dlen, "%s%s", tmp, vals[quadoption (MuttVars[idx].data)]);
else if (DTYPE (MuttVars[idx].type) == DT_NUM)
#define DT_RX 7 /* regular expressions */
#define DT_MAGIC 8 /* mailbox type */
#define DT_SYN 9 /* synonym for another variable */
+#define DT_ADDR 10 /* e-mail address */
#define DTYPE(x) ((x) & DT_MASK)
{ "forw_format", DT_SYN, R_NONE, UL "forward_format", 0 },
{ "forward_quote", DT_BOOL, R_NONE, OPTFORWQUOTE, 0 },
{ "forw_quote", DT_SYN, R_NONE, UL "forward_quote", 0 },
+ { "from", DT_ADDR, R_NONE, UL &From, UL "" },
{ "hdr_format", DT_SYN, R_NONE, UL "index_format", 0 },
{ "hdrs", DT_BOOL, R_NONE, OPTHDRS, 1 },
{ "header", DT_BOOL, R_NONE, OPTHEADER, 0 },
for (; uh; uh = uh->next)
{
- if (mutt_strncasecmp ("reply-to:", uh->data, 9) == 0)
+ if (mutt_strncasecmp ("from:", uh->data, 5) == 0)
+ {
+ /* User has specified a default From: address. Remove default address */
+ rfc822_free_address (&env->from);
+ env->from = rfc822_parse_adrlist (env->from, uh->data + 5);
+ }
+ else if (mutt_strncasecmp ("reply-to:", uh->data, 9) == 0)
{
rfc822_free_address (&env->reply_to);
env->reply_to = rfc822_parse_adrlist (env->reply_to, uh->data + 9);
else if (mutt_strncasecmp ("to:", uh->data, 3) != 0 &&
mutt_strncasecmp ("cc:", uh->data, 3) != 0 &&
mutt_strncasecmp ("bcc:", uh->data, 4) != 0 &&
- mutt_strncasecmp ("subject:", uh->data, 8) != 0 &&
- mutt_strncasecmp ("from:", uh->data, 5) != 0)
+ mutt_strncasecmp ("subject:", uh->data, 8) != 0)
{
if (last)
{
}
}
-static void process_user_from (ENVELOPE *env)
-{
- LIST *uh = UserHeader;
-
- for (; uh; uh = uh->next)
- {
- if (mutt_strncasecmp ("from:", uh->data, 5) == 0)
- {
- rfc822_free_address (&env->from);
- env->from = rfc822_parse_adrlist (env->from, uh->data + 5);
- break;
- }
- }
-}
-
LIST *mutt_copy_list (LIST *p)
{
LIST *t, *r=NULL, *l=NULL;
static ADDRESS *mutt_default_from (void)
{
- ADDRESS *adr = rfc822_new_address ();
+ ADDRESS *adr;
const char *fqdn = mutt_fqdn(1);
-
- /* don't set realname here, it will be set later */
- if (option (OPTUSEDOMAIN))
+ /*
+ * Note: We let $from override $realname here. Is this the right
+ * thing to do?
+ */
+
+ if (From)
+ adr = rfc822_cpy_adr_real (From);
+ else if (option (OPTUSEDOMAIN))
{
+ adr = rfc822_new_address ();
adr->mailbox = safe_malloc (mutt_strlen (Username) + mutt_strlen (fqdn) + 2);
sprintf (adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn));
}
else
+ {
+ adr = rfc822_new_address ();
adr->mailbox = safe_strdup (NONULL(Username));
+ }
+
return (adr);
}
msg->env->from = set_reverse_name (cur->env);
}
- /*
- * process a my_hdr From: at this point, and don't override
- * reverse_name by it.
- */
-
- if (!msg->env->from && option (OPTHDRS) && !(flags & (SENDPOSTPONED | SENDEDITMSG)))
- process_user_from (msg->env);
-
if (!msg->env->from && option (OPTUSEFROM) && !(flags & (SENDEDITMSG|SENDPOSTPONED)))
msg->env->from = mutt_default_from ();