summaryrefslogtreecommitdiff
path: root/public/message-threading.html
blob: f829adece98ba00a4bea413bc9dedc35a5659399 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Notes on email message threading — Luke T. Shumaker</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="assets/style.css">
  <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
<body>
<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » message-threading</header>
<article>
<h1 id="notes-on-email-message-threading">Notes on email message
threading</h1>
<blockquote>
<p>I sent an email to Jamie Zawinski with feedback on his venerable
email threading algorithm. Perhaps my commentary will be a useful
reference to others implementing email threading.</p>
<p>You can see my implementation of his algorithm at <a
href="https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go"
class="uri">https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go</a>
(and a use of it at <a
href="https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go"
class="uri">https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go</a>).</p>
</blockquote>
<div style="font-family: monospace">
<p>To: <a href="https://www.jwz.org/">Jamie Zawinski</a> <a
href="https://www.jwz.org/about.html">&lt;jwz@jwz.org&gt;</a><br/>
Subject: message threading<br/> Date: Sat, 08 Jun 2024 22:34:41 -0600
Message-ID: &lt;87tti2ybry.wl-lukeshu@lukeshu.com&gt;</p>
</div>
<p>Hi,</p>
<p>I'm implementing message threading, and have been referencing both
your document <a
href="https://www.jwz.org/doc/threading.html">&lt;https://www.jwz.org/doc/threading.html&gt;</a>;
and <a href="https://datatracker.ietf.org/doc/html/rfc5256">RFC
5256</a>. I'm not sure whether you're interested in updating a document
that's more than 25 years old, but if you are: I hope you find the
following feedback valuable.</p>
<p>You write that the algorithm in RFC 5256 is merely a <q>restating</q>
of your algorithm, but I noticed 3 (minor) differences:</p>
<ol type="1">
<li><p>In your step 1.C, the RFC says to check whether this would create
a loop, and if it would to skip creating the link; your version only
says to perform this check in step 1.B.</p></li>
<li><p>The RFC says to sort the messages by date between your steps 4
and 5; that is: when grouping by subject, containers in the root set
should be processed in date-order (you do not specify an order), and
that if container in the root set is empty then the subject should be
taken from the earliest-date child (you say to use an arbitrary
child).</p></li>
<li><p>The RFC precisely states how to trim a subject down to a "base
subject," rather than simply saying <q>Strip ``Re:'', ``RE:'',
``RE[5]:'', ``Re: Re[4]: Re:'' and so on.</q></p></li>
</ol>
<p>Additionally, there are two minor points on which I found their
version to be clearer:</p>
<ol type="1">
<li><p>The RFC specifies how to handle messages without a Message-Id or
with a duplicate Message-Id (on <a
href="https://datatracker.ietf.org/doc/html/rfc5256#page-9">page 9</a>),
as well as how to normalize a Message-Id (by referring to <a
href="https://datatracker.ietf.org/doc/html/rfc2822">RFC 2822</a>). This
is perhaps out-of-scope of your algorithm document, but I feel that it
would be worth mentioning in your background or definitions
section.</p></li>
<li><p>In your step 1.B, I did not understand what <q>If they are
already linked, don't change the existing links</q> meant until I read
the RFC, which words it as <q>If a message already has a parent, don't
change the existing link.</q> It was unclear to me what <q>they</q> was
referring to in your version.</p></li>
</ol>
<div style="font-family: monospace">
<p>-- <br/> Happy hacking,<br/> ~ Luke T. Shumaker<br/></p>
</div>

</article>
<footer>
  <aside class="sponsor"><p>I'd love it if you <a class="em"
      href="/sponsor/">sponsored me</a>.  It will allow me to continue
      <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
      ecosystem.  Thanks!</p></aside>

<p>The content of this page is Copyright © 2024 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
</footer>
</body>
</html>