23Jul2022 06:24 Olha via Discus - ┌>[Py] [Users] I need an advise discuss-users 5.7K
22Jul2022 17:12 Paul Jurczak vi - ├>[Py] [Users] I need an advise discuss-users 5.5K
22Jul2022 13:21 Rob via Discuss - ├>[Py] [Users] I need an advise discuss-users 6.8K
22Jul2022 12:53 vasi-h via Disc - ├>[Py] [Users] I need an advise discuss-users 5.5K
22Jul2022 11:38 Cameron Simpson - ├>[Py] [Users] I need an advise discuss-users 14K
22Jul2022 10:27 Rob via Discuss - ├>[Py] [Users] I need an advise discuss-users 6.6K
22Jul2022 06:14 vasi-h via Disc r ┴>[Py] [Users] I need an advise discuss-users 6.5K
それ以外の場合は、トピックの OP 参照を使用し、単に新しい参照を生成しています。明らかに、これがすべての問題の原因となっています。すべてのケースにおいて、アウトバウンドメールが送信されるたびに新しい Message-ID が生成されます。これは正しいようで、他のメールクライアントと同様です。
残念ながら、そうではありません。あなたがメッセージの発信元(つまり、Discourse 内で作成された)である場合、メッセージ ID を生成するのは問題ありません。メッセージ ID がない場合(違法)、それを作成するのは標準的な慣行です(通常は MTA によって行われます)。しかし、あなたがメッセージを転送している場合(メールで作成された)、既存のメッセージ ID は保持されるべきです。
OP には References ヘッダーがあってはなりません。threading には不要であり、実際には存在しない「ポスト 0」があるかのように偽ります。つまり、すべての OP が (a) 返信であるかのように見え、実際にはそうではなく、(b) 返信の対象が受信者のメールボックスから欠落しているように見えます。
これは、OP の各アウトバウンドコピーに対して異なるメッセージ ID を作成します。これは悪いです。それらは同じである必要があります。sam が cameron に直接返信で CC したと仮定します。In-Reply-To は、cameron が決して受け取ったことのないメッセージ ID を引用することになります。
単にメッセージ ID フィールドから sender_user_id と receiver_user_id を削除するだけで、すべての受信者が見る単一の一意の ID が得られます。
23Jul2022 06:24 Olha via Discus - ┌>[Py] [Users] I need an advise discuss-users 5.7K
22Jul2022 17:12 Paul Jurczak vi - ├>[Py] [Users] I need an advise discuss-users 5.5K
22Jul2022 13:21 Rob via Discuss - ├>[Py] [Users] I need an advise discuss-users 6.8K
22Jul2022 12:53 vasi-h via Disc - ├>[Py] [Users] I need an advise discuss-users 5.5K
22Jul2022 11:38 Cameron Simpson - ├>[Py] [Users] I need an advise discuss-users 14K
22Jul2022 10:27 Rob via Discuss - ├>[Py] [Users] I need an advise discuss-users 6.6K
22Jul2022 06:14 vasi-h via Disc r ┴>[Py] [Users] I need an advise discuss-users 6.5K
すべてに先頭の矢印があることを見てください。これは、メールクライアントがそれらがすべて共通の(そして欠落している)ルートメッセージへの返信であると信じているためです。これは、References ヘッダー内の「topic」メッセージ ID が原因です。一方、ポスト 1 は実際には上記で表示されている一番下のメッセージです。
まとめ:
あなたの計画は良いですが、メッセージ ID から送信者と受信者を削除する必要があります。それらは不要であり、実際には受信者が問題を引き起こします(送信者は単に冗長です)。
References から「topic」疑似メッセージ ID を削除してください。これはメールクライアント(TB も含む、視覚的に明らかでなくても)を誤解させます。
考えてみてください:私は 43585349859734@test.com というメッセージ ID で返信を作成して送信します。一貫性の理由から、それをローカルフォルダーにコピーして保持し、そこでは OP への返信として表示されます。理想的には、Discourse も私のポストのコピーを私に送信します(これは多くのメーリングリストの方針設定です)。したがって、Discourse のバージョンも取得します。それは同じメッセージ ID を持つべきです。それは同じメッセージだからです。単に異なるルートを経由しているだけです。
ただし、彼らのシナリオでは、PR が OP です。したがって、プルリクエストへの直接参照は合理的です。ポスト 1 に対して「topic」メッセージ ID を使用することもできます。ただし、「topic/1」ID も同時に使用しない場合に限ります。しかし、あまり意味はないようです。ポスト 1 を特別扱いするのは余計な労力です。私は自分で「topic/1」を使用するでしょう。
複雑さを追加します。私の理解では、管理者はポストやトピックを移動できます。それは「メッセージ ID を生成する」方式、特にポストだけを移動した場合に壊れないでしょうか?私の意見では、すべてのポストが _message_id フィールドを持つべきです。これは、インバウンドメッセージ(メールから)から埋め込まれるか、または(Discourse 経由での投稿の場合)生成されます。そうすれば、それは永続的で安定しており、ポストの入れ替えやアルゴリズムの変更に対して堅牢です。
最後に、小さなセキュリティ上の考慮事項があります:既存のポストのメッセージ ID を主張するインバウンドメールのメッセージ ID は無視すべきです(そして、場合によってはそのメッセージをバウンスさせるべきです)。著者として、私はそのヘッダーに何でも入れることができるからです 私は単にメッセージ ID を削除することをお勧めします。ポストを受け入れはしますが、他のポストであるように嘘をつかせないでください。Discourse 生成の ID をコピーに割り当て、通常通り進めてください。
References を使用すれば、少なくとも OP までの完全なチェーンを知ることができます。一方、In-Reply-To の場合は、物事を結びつけるために前後の先行メッセージが必要になります。メーリングリストの場合、私は通常、スレッド全体が完了するまでローカルに保持しますが、それは一般的なことだと思います。