MBOX-Line: From tss at iki.fi  Wed Apr  4 01:16:14 2012
To: imap-protocol@u.washington.edu
From: Timo Sirainen <tss@iki.fi>
Date: Fri Jun  8 12:34:48 2018
Subject: [Imap-protocol] Question about FETCH command
In-Reply-To: <20120404080626.GA5317@launde.brong.net>
References: <1328732126.32086.140661033971485@webmail.messagingengine.com>
	<201202090820.28260.thomas@koch.ro> <4F337E61.5040702@qbik.com>
	<20120209112411.GB29734@launde.brong.net>
	<4F7B8913.4060308@earthlink.net>
	<20120404080626.GA5317@launde.brong.net>
Message-ID: <531D9C22-57F9-4928-B5D9-E5773E0234C7@iki.fi>

On 4.4.2012, at 11.06, Bron Gondwana wrote:

> Totally not replying to you here, but here's a fine example of why
> THREAD=REFERENCES is broken in the real world.  You replied to an
> existing message, changed the subject, didn't strip these headers:
> 
> References: <1328732126.32086.140661033971485@webmail.messagingengine.com>
>        <201202090820.28260.thomas@koch.ro> <4F337E61.5040702@qbik.com>
>        <20120209112411.GB29734@launde.brong.net>
> In-Reply-To: <20120209112411.GB29734@launde.brong.net>
> 
> And so you get threaded in a totally different discussion.  Yay.
> 
> User-Agent: Mozilla/5.0 (Windows NT 5.1;
>        rv:11.0) Gecko/20120327 Thunderbird/11.0.1
> 
> Not that it's Thunderbird's fault, necessarily.  I might suggest to
> them a "you changed the subject, are you sure this is actually a
> reply" type of question be asked...

Yeah.. But then again people do sometimes change the subject of an existing thread, and it should stay that way. Would be a useful feature for a mail client though to ask about it. Also Dovecot mailing list actually rejects these kinds of mails :) If this Perl script fails the post is rejected:

my $hdr = 1;
my $is_reply = 0;
my $has_in_reply_to = 0;
while (<>) {
  if ($hdr) {
    $is_reply = 1 if (/^Subject: .*Re?:/i);
    $is_reply = 1 if (/^Subject: .*[\[\(]was\b/i);
    $has_in_reply_to = 1 if (/^In-Reply-To:.*</i);
    $hdr = 0 if (/^$/);
  } else {
    $is_reply = 1 if (/^[>|]/);
  }
}

if ($has_in_reply_to && !$is_reply) {
  exit 1;
}
