Discourse のメールメッセージが正しくスレッド化されていません

あらゆる種類の潜在的なことへの扉を開きます。たとえば、メールを拒否したり、メッセージの古いバージョンに返信したりすることなどです。しかし、それは想像力であり、良いアイデアのように聞こえるかもしれませんが、必ずしもそうではないものです :smiley:

「いいね!」 3

まだ言及されていないようなので、必ず対応してください。

  • メールに「以前の返信」セクションが含まれている場合は、(受信者固有のものにする)

以前の返信で何を意味しているのか、また、受信者固有にするにはどうすればよいのか分かりません。ここで詳しく説明した、一貫した Message-ID に関するより広範な戦略とどのように関連するのでしょうか?

「以前の返信」セクションが表示される場合、一貫したメッセージIDを完全に諦める必要があります。複数の投稿が単一のメールに結合されているため、複数の視点にわたってすべてのコンテンツを一貫して識別する正しい単一メッセージIDは存在しません。

編集:実際には、それらを連結するだけでよいのではないでしょうか?
topic/1234/post/12345.also-12340-12339

さらに、これにより、前述のスパムトリガーがさらに深刻になります。同じメッセージIDの下で購読解除リンクを変更するだけでなく、同じメッセージIDで配信される異なるバージョンには、実際に追加または除外される単語が含まれています。

Kane York氏によるDiscourse Metaへの投稿(2022年8月2日 04:26):

「以前の返信」セクションが表示される場合、一貫したメッセージIDを完全に諦める必要があります。複数の投稿を1つのメールにまとめています!

これについてもう少し詳しく説明していただけますか?この場合、メールはどのようになりますか?例はありますか?

複数のビューポイントにわたって一貫してすべてのコンテンツを識別する正しい単一メッセージIDはありません。

ほとんどの場合、最初のものなど、1つだけ選択すれば十分です。この例がまだ返信である場合。

編集:実際には、それらを連結するだけでよいのではないでしょうか?
topic/1234/post/12345.also-12340-12339

Discourseフォーラムのソース投稿への参照とメッセージIDを混同しているのではないでしょうか。メッセージIDは電子メールメッセージを識別します。返信投稿の場合、「In-Reply-To」および「References」のメッセージIDは、関連する先行電子メールメッセージのメッセージIDと一致する必要があります。誰かがトピックに投稿すると、メールコピーを要求した人にメールで送信されるその投稿のすべてのコピーは、同じメッセージIDを持つ必要があります。

さらに、これにより、前述のスパムトリガーがさらに深刻になります。同じメッセージIDの下で配信停止リンクを変更するだけでなく、同じメッセージIDで配信される異なるバージョンには、実際に追加されたり除外されたりする単語があります。

これらが投稿の最後にある「管理フッター」である場合、それには問題ありません。

私たちが同じことについて話しているのかどうか、完全にはわかりません。

また、ここで議論している具体的なスパムトリガーは何ですか?「わずかに異なる」電子メールメッセージは、現実世界では常に送信されています。

よろしく、
Cameron Simpson cs@cskk.id.au

「いいね!」 1

ケインは、このオプションについて話しています。

ユーザーは、大量の以前の返信をメールの末尾に追加することを選択できます。

これは現時点ではバックグラウンドノイズとして処理し、一意の購読解除リンクの扱いと同様に扱うことにします。

コンセンサスが得られたので、これ以上の進捗を妨げたくありません。

(どのように見えるかについては、私の意見ではかなり紛らわしいですが、一部のユーザーはそれを気に入っています)

「いいね!」 1

Sam Saffron氏によるDiscourse Metaからの投稿(2022年8月2日 05:29):

[quote=“Cameron Simpson, post:51, topic:233499,
username:cameron-simpson”]
これについてもう少し詳しく説明していただけますか?この場合、メールはどのようになりますか?例はありますか?
[/quote]

ケインは、このオプションについて話しています。

ユーザーは、大量の忠実度を持つ以前の返信をメールの末尾に追加することを選択できます。

ああ、ありがとうございます。

これを現時点ではバックグラウンドノイズとして処理し、一意の購読解除リンクの扱いと同様に扱いたいと思います。

私もそうするでしょう。私の考えでは、これはRFCの「投稿者/著者の元の意図」という目標に合致しています。付随的なものですが、異なる中心的なメッセージではありません。

よろしく、
Cameron Simpson cs@cskk.id.au

「いいね!」 2

同意します。計画通り進めましょう。昨日から変更の検討を開始し、メール受信者から着手しました。

@cameron-simpson FYIですが、現在抱えている他の責任と合わせて進めています。来週は休暇を取り、その後9月の最初の2週間も休暇を取るため、実際の進捗を示すには少し時間がかかるかもしれません。しかし、これは常に念頭に置いており、定期的にここで進捗状況を報告しますのでご安心ください。これまでのご参加とご協力に感謝いたします。

「いいね!」 1

Discourse Meta の Martin Brennan より 2022年8月2日 07:06:

@cameron-simpson FYI、現在他の責任と並行して進めています。来週は休暇を取り、その後9月の最初の2週間も休暇を取るため、実際の進捗が見えるまでしばらく時間がかかるかもしれません。これは念頭に置いており、定期的にここでアップデートを投稿しますので、これまでの参加と貢献に感謝します!

ありがとうございます。
Cameron Simpson cs@cskk.id.au

@cameron-simpson 旅行から戻り、この件の作業を再開しました。さまざまな References および In-Reply-To のシナリオについて、さらに明確にしたい点があります。

シナリオ 1: Discourse 内で、別の投稿に直接返信しない投稿を作成する場合、保存しているトピック OP の Message-ID を、ReferencesIn-Reply-To の両方に使用しますか?これは新しい outbound_message_id 列に保存されています。

シナリオ 2: 投稿が一度に複数の他の投稿に返信する場合(引用によって発生することがあります)、In-Reply-To にはどの投稿を使用しますか?また、References にはすべて使用しますか、それとも In-Reply-To に選択した単一の投稿のみを使用しますか?OP 投稿の Message-IDReferences に含めますか?

シナリオ 3: 上記と同様ですが、単一の投稿に返信する場合を考えます。投稿 B に返信しており、その投稿 B は投稿 A への返信である場合、In-Reply-To は単に投稿 B を指し、References投稿 A, 投稿 B の順序になりますか(もちろん、常に投稿の outbound_message_id を介して Message-ID を参照します)?返信チェーンを遡り続けますか、それとも References の最初の親で停止しますか?

これは主に、RFC のこの引用をどのように解釈するかという問題であり、主に References に影響します。これらは、引用などによる直接の返信に限定されるのか、それとも常に OP も含まれるのか。

注: 実装によっては、「References:」フィールドを解析して「ディスカッションのスレッド」を表示します。これらの実装では、各新しいメッセージが単一の親への返信であると想定しており、したがって「References:」フィールドを逆方向にたどって、そこにリストされている各メッセージの親を見つけることができると想定しています。したがって、複数の親を持つ返信の「References:」フィールドを形成しようとすることは推奨されません。その方法は、このドキュメントでは定義されていません。

Cameron、ありがとうございます。現時点では、私が正しいと思う方法で進め、返信に基づいて調整します。

Martin Brennan 氏による Discourse Meta の投稿(2022年8月19日 03:48):

@cameron-simpson 旅行から戻り、この作業を再開しました。
ReferencesIn-Reply-To のさまざまなシナリオについて、さらに明確にしたいことがあります。

シナリオ 1: Discourse 内で、別の投稿に直接返信しない投稿を作成する場合、トピックの OP の Message-IDoutbound_message_id 列に保存し、それを ReferencesIn-Reply-To の両方に使用しますか?

用語に問題があるかもしれません。新しいトピックの OP については、OP であるため ReferencesIn-Reply-To はないはずです。

既存のトピック内の投稿で、特定の以前の投稿を引用していない場合(これが実際に説明していることだと思います)、各 ReferencesIn-Reply-To に OP の Message-ID のみを指定します。

シナリオ 2: 投稿が一度に複数の他の投稿に返信する場合(引用による場合があります)、In-Reply-To にはどの投稿を使用しますか?

[RFC 5322 を再読中…]

  • In-Reply-To には、返信する各投稿の Message-ID を含める必要があります。
  • References は、親(*) の References に親の Message-ID を追加したものです。

したがって、In-Reply-To はスレッドで 1 つ前のメッセージに戻ります。複数の親投稿がある場合は、複数の message-id がありますが、それらはすべて直接の親投稿の message-id である必要があります。

References は、OP からこの投稿の親(*) までの返信の全チェーンを追跡するためのものです。したがって、親へのスレッドに親の message-id を追加して計算されます。

(*) 複数の親がいる場合: RFC では、クライアント(メールリーダー)はしばしば References が OP からの単一のスレッドを追跡することを期待しているため、RFC は親の References をすべてマージすることを明示的に推奨していません。代わりに 1 つを選択する必要があります。個人的には最初に引用された親投稿を選ぶ傾向がありますが、それは明らかにポリシー決定です。おそらく最も役立つと思われるものを選択してください。

シナリオ 3: 上記と同様ですが、単一の投稿への返信に限定します。投稿 B に返信しており、投稿 B は投稿 A への返信である場合、In-Reply-To は投稿 B を指し、References投稿 A, 投稿 B の順になりますか(もちろん、常に投稿の outbound_message_id を介して Message-ID を参照します)。返信チェーンをどこまでも遡りますか、それとも References の最初の親で停止しますか?

In-Reply-To は正確に 1 つ前のレイヤーに戻ります。したがって、このシナリオでは親投稿の Message-ID のみが含まれます。

References は OP からこのメッセージまでのチェーンです。

これは主に、RFC のこの引用をどのように解釈するかに関係しており、主に References に影響します。これらは引用などによる直接の返信に限定されますか、それとも常に OP も含まれますか?

それらは常に OP から始まるべきです。先行するすべての投稿がこれを行っている場合、親の References に親の message-id を追加するだけで、チェーン全体を無料で取得できます。

「レガシー」メッセージを扱っている場合は、ツリーを遡ることができます。または、常にそうすることを選択することもできます。または、今後については、親に References があればそれを取得するだけでよいと言うこともできます。データベースに何を保存するかによって異なります。

In-Reply-To が直接の親関係であり、References が OP への線である限り、問題ないと思います。

よろしく、
Cameron Simpson cs@cskk.id.au

「いいね!」 2

はい、それが私が説明していたことです。ありがとうございます。

ありがとうございます。つまり、基本的に答えは、引用された単一の投稿を選択して親として使用し(最初に引用されたか、最も最近作成された投稿かに関わらず、1つを選択することが重要です)、それをIn-Reply-Toに使用し、OPまでのすべての親とともにReferencesに使用する、ということですね。

了解しました、よくわかります。

これで全てが明確になったと思います。あなたの回答は私が期待していたものでした。手動テストを開始する前に確認したかったのです。迅速な返信をありがとうございました :+1:

「いいね!」 1

@cameron-simpson

説明通りに動作するようになったと思います。mutt を設定し、スレッドが正しく機能しているように見えます(ただし、スレッドで件名が省略されている理由がわからないこと、および自分の送信した返信をスレッド内でインラインで表示するように設定する方法がわからないことについては、確信がありません)。

そして、Thunderbird が同じスレッドをどのように表示するかは次のとおりです(実際には、Thunderbird も返信をインラインで表示しないことに気づきました)。

Gmail でどのように表示されるかは次のとおりです。

ヘッダーは以下にあります。投稿 ID は 91 から始まるため、投稿 1 == 投稿 ID 91 です。

投稿/メール 1

(最初のメールなので、References または In-Reply-To はありません)

From: Martin Brennan via The Email Threading Sandbox <notifications@cdckmartintesting.discoursemail.com>
Reply-To: The Email Threading Sandbox <incoming+3706c086cd36c6e37550c24f4e25c9b8@cdckmartintesting.discoursemail.com>
To: imaptest2@discourse.org
Message-ID: <discourse/post/91@discoursehosted.martin-brennan.com>
Subject: [The Email Threading Sandbox] [Royal Court] Threading topic 1 for

投稿/メール 2

From: Bizarro Martin via The Email Threading Sandbox <notifications@cdckmartintesting.discoursemail.com>
Reply-To: The Email Threading Sandbox <incoming+9ea955b74a04dc85f5504ad245636824@cdckmartintesting.discoursemail.com>
To: imaptest2@discourse.org
Message-ID: <discourse/post/92@discoursehosted.martin-brennan.com>
In-Reply-To: <discourse/post/91@discoursehosted.martin-brennan.com>
References: <discourse/post/91@discoursehosted.martin-brennan.com>
Subject: [The Email Threading Sandbox] [Royal Court] Threading topic 1 for

投稿/メール 3

From: Martin Brennan via The Email Threading Sandbox <notifications@cdckmartintesting.discoursemail.com>
Reply-To: The Email Threading Sandbox <incoming+410877b7f868b59945f3e3ea16570fc4@cdckmartintesting.discoursemail.com>
To: imaptest2@discourse.org
Message-ID: <discourse/post/93@discoursehosted.martin-brennan.com>
In-Reply-To: <discourse/post/91@discoursehosted.martin-brennan.com>
References: <discourse/post/91@discoursehosted.martin-brennan.com>

投稿/メール 4

投稿 2 と投稿 3 の両方に返信しますが、References チェーンには 1 つしか選択できないため、投稿 3 を親として使用します。

Date: Mon, 22 Aug 2022 04:05:45 +0000
From: Bizarro Martin via The Email Threading Sandbox <notifications@cdckmartintesting.discoursemail.com>
Reply-To: The Email Threading Sandbox <incoming+0a63eba3765f58e709a2ca538ca2b926@cdckmartintesting.discoursemail.com>
To: imaptest2@discourse.org
Message-ID: <discourse/post/94@discoursehosted.martin-brennan.com>
In-Reply-To: <discourse/post/93@discoursehosted.martin-brennan.com>
References: <discourse/post/91@discoursehosted.martin-brennan.com>
 <discourse/post/93@discoursehosted.martin-brennan.com>
Subject: [The Email Threading Sandbox] [Royal Court] Threading topic 1 for

投稿/メール 5

これは投稿 4 に直接返信しており、投稿 4 は投稿 3 に直接返信しています。

Date: Mon, 22 Aug 2022 05:05:06 +0000
From: Martin Brennan via The Email Threading Sandbox <notifications@cdckmartintesting.discoursemail.com>
Reply-To: The Email Threading Sandbox <incoming+d66f675a0ce64fcaa2ba6b91e3112b05@cdckmartintesting.discoursemail.com>
To: imaptest2@discourse.org
Message-ID: <discourse/post/95@discoursehosted.martin-brennan.com>
In-Reply-To: <discourse/post/94@discoursehosted.martin-brennan.com>
References: <discourse/post/91@discoursehosted.martin-brennan.com>
 <discourse/post/93@discoursehosted.martin-brennan.com>
 <discourse/post/94@discoursehosted.martin-brennan.com>
Subject: [The Email Threading Sandbox] [Royal Court] Threading topic 1 for

投稿/メール 6

メールで送信した返信に返信します。Thunderbird によって生成された(奇妙な)Message-ID 12d1ec8f-859c-2339-2c7d-9cb3310756a2@discourse.org を維持していることに注意してください。

Date: Mon, 22 Aug 2022 05:16:31 +0000
From: Martin Brennan via The Email Threading Sandbox <notifications@cdckmartintesting.discoursemail.com>
Reply-To: The Email Threading Sandbox <incoming+fb424977c7bd0c8146bdd7302dc35933@cdckmartintesting.discoursemail.com>
To: imaptest2@discourse.org
Message-ID: <discourse/post/97@discoursehosted.martin-brennan.com>
In-Reply-To: <12d1ec8f-859c-2339-2c7d-9cb3310756a2@discourse.org>
References: <discourse/post/91@discoursehosted.martin-brennan.com>
 <discourse/post/93@discoursehosted.martin-brennan.com>
 <discourse/post/94@discoursehosted.martin-brennan.com>
 <discourse/post/95@discoursehosted.martin-brennan.com>
 <12d1ec8f-859c-2339-2c7d-9cb3310756a2@discourse.org>
Subject: [The Email Threading Sandbox] [Royal Court] Threading topic 1 for
 2022-08-22

今、あなたのテストサイトのアカウントを設定するために、PM を送ってもよろしいでしょうか?そして、これがあなたが期待しているものと一致するかどうかを確認するために、メールの送受信をいくつか行ってみましょうか?

「いいね!」 6

Discourse Meta の Martin Brennan より 2022年8月22日 05:36:

@cameron-simpson 説明されている通りに動作していると思います。
mutt をセットアップし、スレッドが正しく機能しているようです(ただし、スレッドで件名が省略されている理由と、自分の送信済み返信をスレッド内にインラインで表示するように設定する方法がわかりません)。

私の目には良く見えます。

件名は、次のスレッドがどこから始まるかをわかりやすくするために、返信では(変更されない限り)省略されます。必要であればスレッドを折りたたむこともできます。

自分の返信を表示するには、その返信のコピーをそのフォルダに保存する必要があります。$record 設定で制御できます。
The Mutt E-Mail Client

そして、これが Thunderbird が同じスレッドをどのように表示するかです(実際には Thunderbird も私の返信をインラインで表示しないことに気づきました)。

私の目にはこれも良く見えます。

Gmail では次のようになります。

それは…かなりコンパクトではありませんね :slight_smile:

ヘッダーは下にあり、投稿 ID は 91 から始まります。つまり、投稿 1 は投稿 ID 91 です。
[…]

これらのヘッダーはすべて、メッセージの関係についての説明に従って正しいようです。

Discourse は、メールの返信をメールアドレスに基づいてつなぎ合わせるために、おそらく Reply-To を特徴的な ID と共に使用していることに気づきました。これは明らかに機能しています。もし Discourse がそれを返信の In-Reply-To ヘッダーから派生させているのであれば、より安定したアドレスを使用できるでしょう :slight_smile:

テストサイトのアカウント設定のために、今すぐあなたにプライベートメッセージを送ってもいいですか?そうすれば、メールの送受信をいくつか行って、これが期待どおりのものと一致するかどうかを確認できますか?

もちろんです!

よろしく、
Cameron Simpson cs@cskk.id.au

「いいね!」 2

これは実際には、カテゴリに送信しているのかトピックに送信しているのかを判断するために使用されており、In-Reply-ToやReferencesのMessage-IDsなどほどは使用されていません。

ありがとうございます。PMと私のサイトからのメール招待をお送りします。

やり取りを重ね、期待どおりに動作しているようです。以下にThunderbirdでのスレッドの例を示します。

@cameron-simpson、これをDiscourseコアに組み込んでもよろしいでしょうか? テストにご協力いただき、ありがとうございました。

「いいね!」 1

References をもう少し詳しく確認したいと思います。メッセージで奇妙な点に気づき、メールでマルチリプライを送信しましたが、認識されなかったようです。今夜確認してみます。

「いいね!」 1

ああ、あなたの最新の投稿を見ました。Discourseで2つの投稿に返信すると、どのようなことが期待されますか?メール受信からの返信として、引用を解析して複数の投稿に帰属させることをサポートしているかどうかわかりません。Referencesをさらに確認していただきありがとうございます。もしご自身のDiscourseインスタンスをお持ちで、これをテストしたい場合、または単にロジックに興味がある場合は、コードはこのブランチ feature/the-phantom-email-thread にあります。https://github.com/discourse/discourse/pull/17996 を参照してください。まだ少しクリーンアップが必要です。

編集:返信の問題を見つけました。テストフォーラムで返信しています。

「いいね!」 1

Discourse Meta の Martin Brennan より 2022年8月23日 06:16:\n\u003eああ、あなたの最新の投稿が今見えました。返信を2つの投稿に行う際に、Discourse に何を期待していますか?受信メールからの返信として、引用を解析し、複数の投稿に帰属させることをサポートしているかどうかわかりません。\n\n私はそれを期待していませんでした。Discourse が In-Reply-To メッセージ ID を確認し、それらを一致する投稿に関連付け、そこから「複数返信」を導き出すことを期待していました。\n\nとはいえ、ウェブでどのようにマルチリプライを行うのか(少なくとも mutt ではメールでは非常に簡単です)、またデータベースで親投稿をどのように表現しているのかさえ知りません。メッセージテキスト自体を解析しているわけではないですよね?\n\n\u003e References についてもさらに確認していただきありがとうございます。もしご自身の Discourse インスタンスをお持ちで、これをテストしたい場合、またはロジックに興味がある場合は、コードはこのブランチにあります。\n\u003e feature/the-phantom-email-thread、参照してください。\n\u003e https://github.com/discourse/discourse/pull/17996 。まだ少しクリーンアップが必要です。\n\nありがとうございます。確認してみます。テストディスカッションの図を描いて、さまざまなヘッダーをそれと照合する必要があります。今日は distract されすぎていました。\n\nCheers,\nCameron Simpson \u003ccs@cskk.id.au\u003e

ここにコメントをいくつか追加しましたが、頭が働かなくなってきました。特に、add_identification_field_headers のコメントはおそらく見当違いです。これは、この新しい実験的なモードが有効になっていない場合のフォールバック/元のコードですか? add_experimental_identification_field_headers のコメントの方がより重要です。

「いいね!」 1