# HG changeset patch
# User David Champion <[email protected]>
# Date 1451647188 21600
# Fri Jan 01 05:19:48 2016 -0600
# Node ID cd7be2bfff1cd15592b15adc21f44f7b50ecc312
# Parent 9480a363a68a7472d61c8e27a29fd2312cac8721
favor List-Reply over List-Post
The longstanding <list-reply> function originally worked only for
messages from known and subscribed mailing lists. Later mutt added
support for replying to RFC 2369 List-Post: headers, but this is
incomplete RFC 2369 support.
As a first step to completing RFC 2369 support, we favor List-Reply:
headers over List-Post: when performing <list-reply>. That is, if a
List-Reply: is present then we send replies to that URL; otherwise we
look for List-Post as previously.
diff -r 9480a363a68a -r cd7be2bfff1c mutt.h
--- a/mutt.h Thu Dec 17 12:25:00 2015 -0800
+++ b/mutt.h Fri Jan 01 05:19:48 2016 -0600
@@ -586,7 +586,8 @@
ADDRESS *sender;
ADDRESS *reply_to;
ADDRESS *mail_followup_to;
- char *list_post; /* this stores a mailto URL, or nothing */
+ char *list_post;
+ char *list_reply;
char *subject;
char *real_subj; /* offset of the real subject */
char *message_id;
diff -r 9480a363a68a -r cd7be2bfff1c parse.c
--- a/parse.c Thu Dec 17 12:25:00 2015 -0800
+++ b/parse.c Fri Jan 01 05:19:48 2016 -0600
@@ -950,6 +950,31 @@
return NULL;
}
+static int parse_list_header(char **dst, char *p)
+{
+ char *beg, *end;
+
+ /* RFC 2369. FIXME: We should ignore whitespace, but don't. */
+ if (!strncmp (p, "NO", 2))
+ return 0;
+
+ for (beg = strchr (p, '<'); beg; beg = strchr (end, ','))
+ {
+ ++beg;
+ if (!(end = strchr (beg, '>')))
+ break;
+
+ /* Take the first mailto URL */
+ if (url_check_scheme (beg) == U_MAILTO)
+ {
+ FREE (dst);
+ *dst = mutt_substrdup (beg, end);
+ break;
+ }
+ }
+ return 1;
+}
+
void mutt_parse_mime_message (CONTEXT *ctx, HEADER *cur)
{
MESSAGE *msg;
@@ -1105,29 +1130,14 @@
}
else if (!ascii_strcasecmp (line + 1, "ist-Post"))
{
- /* RFC 2369. FIXME: We should ignore whitespace, but don't. */
- if (strncmp (p, "NO", 2))
- {
- char *beg, *end;
- for (beg = strchr (p, '<'); beg; beg = strchr (end, ','))
- {
- ++beg;
- if (!(end = strchr (beg, '>')))
- break;
-
- /* Take the first mailto URL */
- if (url_check_scheme (beg) == U_MAILTO)
- {
- FREE (&e->list_post);
- e->list_post = mutt_substrdup (beg, end);
- break;
- }
- }
- }
- matched = 1;
+ matched = parse_list_header(&e->list_post, p);
+ }
+ else if (!ascii_strcasecmp (line + 1, "ist-Reply"))
+ {
+ matched = parse_list_header(&e->list_reply, p);
}
break;
-
+
case 'm':
if (!ascii_strcasecmp (line + 1, "ime-version"))
{
diff -r 9480a363a68a -r cd7be2bfff1c send.c
--- a/send.c Thu Dec 17 12:25:00 2015 -0800
+++ b/send.c Fri Jan 01 05:19:48 2016 -0600
@@ -1214,10 +1214,11 @@
/* Parse and use an eventual list-post header */
if ((flags & SENDLISTREPLY)
- && cur && cur->env && cur->env->list_post)
+ && cur && cur->env && (cur->env->list_post || cur->env->list_reply))
{
/* Use any list-post header as a template */
- url_parse_mailto (msg->env, NULL, cur->env->list_post);
+ url_parse_mailto (msg->env, NULL,
+ cur->env->list_reply ? cur->env->list_reply :
cur->env->list_post);
/* We don't let them set the sender's address. */
rfc822_free_address (&msg->env->from);
}