mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
notmuch reply: Fish out user's address from recipient list to use as From.
That is, if mail was addresses to one of the "other" addresses in the configuration file, then the reply will have its "From" header set to that same address rather than the primary address.
This commit is contained in:
parent
dbe41eab82
commit
8f9bd26e62
1 changed files with 43 additions and 16 deletions
|
@ -92,7 +92,14 @@ address_is_users (const char *address, notmuch_config_t *config)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
/* For each address in 'list' that is not configured as one of the
|
||||||
|
* user's addresses in 'config', add that address to 'message' as an
|
||||||
|
* address of 'type'.
|
||||||
|
*
|
||||||
|
* The first address encountered that *is* the user's address will be
|
||||||
|
* returned, (otherwise NULL is returned).
|
||||||
|
*/
|
||||||
|
static const char *
|
||||||
add_recipients_for_address_list (GMimeMessage *message,
|
add_recipients_for_address_list (GMimeMessage *message,
|
||||||
notmuch_config_t *config,
|
notmuch_config_t *config,
|
||||||
GMimeRecipientType type,
|
GMimeRecipientType type,
|
||||||
|
@ -100,6 +107,7 @@ add_recipients_for_address_list (GMimeMessage *message,
|
||||||
{
|
{
|
||||||
InternetAddress *address;
|
InternetAddress *address;
|
||||||
int i;
|
int i;
|
||||||
|
const char *ret = NULL;
|
||||||
|
|
||||||
for (i = 0; i < internet_address_list_length (list); i++) {
|
for (i = 0; i < internet_address_list_length (list); i++) {
|
||||||
address = internet_address_list_get_address (list, i);
|
address = internet_address_list_get_address (list, i);
|
||||||
|
@ -124,13 +132,26 @@ add_recipients_for_address_list (GMimeMessage *message,
|
||||||
name = internet_address_get_name (address);
|
name = internet_address_get_name (address);
|
||||||
addr = internet_address_mailbox_get_addr (mailbox);
|
addr = internet_address_mailbox_get_addr (mailbox);
|
||||||
|
|
||||||
if (! address_is_users (addr, config))
|
if (address_is_users (addr, config)) {
|
||||||
|
if (ret == NULL)
|
||||||
|
ret = addr;
|
||||||
|
} else {
|
||||||
g_mime_message_add_recipient (message, type, name, addr);
|
g_mime_message_add_recipient (message, type, name, addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
/* For each address in 'recipients' that is not configured as one of
|
||||||
|
* the user's addresses in 'config', add that address to 'message' as
|
||||||
|
* an address of 'type'.
|
||||||
|
*
|
||||||
|
* The first address encountered that *is* the user's address will be
|
||||||
|
* returned, (otherwise NULL is returned).
|
||||||
|
*/
|
||||||
|
static const char *
|
||||||
add_recipients_for_string (GMimeMessage *message,
|
add_recipients_for_string (GMimeMessage *message,
|
||||||
notmuch_config_t *config,
|
notmuch_config_t *config,
|
||||||
GMimeRecipientType type,
|
GMimeRecipientType type,
|
||||||
|
@ -140,9 +161,9 @@ add_recipients_for_string (GMimeMessage *message,
|
||||||
|
|
||||||
list = internet_address_list_parse_string (recipients);
|
list = internet_address_list_parse_string (recipients);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return;
|
return NULL;
|
||||||
|
|
||||||
add_recipients_for_address_list (message, config, type, list);
|
return add_recipients_for_address_list (message, config, type, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -156,7 +177,7 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
|
||||||
notmuch_messages_t *messages;
|
notmuch_messages_t *messages;
|
||||||
notmuch_message_t *message;
|
notmuch_message_t *message;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
const char *subject, *recipients;
|
const char *subject, *recipients, *from_addr = NULL;
|
||||||
const char *in_reply_to, *orig_references, *references;
|
const char *in_reply_to, *orig_references, *references;
|
||||||
char *reply_headers;
|
char *reply_headers;
|
||||||
struct {
|
struct {
|
||||||
|
@ -203,13 +224,6 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: We need a configured email address (or addresses) for
|
|
||||||
* the user here, so that we can prevent replying to the user,
|
|
||||||
* and also call _mime_message_set_sender to set From: (either
|
|
||||||
* from the first "owned" address mentioned as a recipient in
|
|
||||||
* the original message, or else some default address).
|
|
||||||
*/
|
|
||||||
|
|
||||||
subject = notmuch_message_get_header (message, "subject");
|
subject = notmuch_message_get_header (message, "subject");
|
||||||
|
|
||||||
if (strncasecmp (subject, "Re:", 3))
|
if (strncasecmp (subject, "Re:", 3))
|
||||||
|
@ -217,13 +231,26 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
|
||||||
g_mime_message_set_subject (reply, subject);
|
g_mime_message_set_subject (reply, subject);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
|
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
|
||||||
|
const char *addr;
|
||||||
|
|
||||||
recipients = notmuch_message_get_header (message,
|
recipients = notmuch_message_get_header (message,
|
||||||
reply_to_map[i].header);
|
reply_to_map[i].header);
|
||||||
add_recipients_for_string (reply, config,
|
addr = add_recipients_for_string (reply, config,
|
||||||
reply_to_map[i].recipient_type,
|
reply_to_map[i].recipient_type,
|
||||||
recipients);
|
recipients);
|
||||||
|
if (from_addr == NULL)
|
||||||
|
from_addr = addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (from_addr == NULL)
|
||||||
|
from_addr = notmuch_config_get_user_primary_email (config);
|
||||||
|
|
||||||
|
from_addr = talloc_asprintf (ctx, "%s <%s>",
|
||||||
|
notmuch_config_get_user_name (config),
|
||||||
|
from_addr);
|
||||||
|
g_mime_object_set_header (GMIME_OBJECT (reply),
|
||||||
|
"From", from_addr);
|
||||||
|
|
||||||
in_reply_to = talloc_asprintf (ctx, "<%s>",
|
in_reply_to = talloc_asprintf (ctx, "<%s>",
|
||||||
notmuch_message_get_message_id (message));
|
notmuch_message_get_message_id (message));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue