Discourse-E-Mails werden falsch geordnet

Entschuldigen Sie im Voraus für den Tonfall unten. Ich klinge ein wenig verärgert, weil ich es auch bin.

Von Michael Brown via Discourse Meta am 27. Juli 2022, 14:06 Uhr:

Entschuldigung, ich bin gerade erst auf dem neuesten Stand, hier sind einige Gedanken, von denen einige bereits angesprochen wurden…

Die Schwierigkeit hierbei ist, dass das, was aus Discourse herausgesendet wird, eine andere Nachricht ist als die eingehende. Sie hat andere Metadaten (für diesen Zweck: An/Von/Antworten-an/Abmelden/usw.) und einen anderen Body (sie ist pro Benutzer angepasst (glaube ich? Passiert das im Mailinglisten-Modus nicht?)).

Was genau ist die Nachricht? Wenn man 5322 als Evangelium betrachtet:

Eine Nachricht besteht aus Header-Feldern, optional gefolgt von einem Nachrichtentext.

Das Feld “Message-ID:” liefert eine eindeutige Nachrichten-ID, die sich auf eine bestimmte Version einer bestimmten Nachricht bezieht.
[Hervorhebung von mir]

Es ist diese “bestimmte Version”, die mich denken lässt, dass es unangemessen wäre, eine eingehende Nachricht mit einer anderen Message-ID erneut zu senden. Wenn Sie jedoch Ihren Standpunkt von Discourse als “Forensoftware” zu Discourse als “Mailinglisten-Software” ändern, dann ergibt es irgendwie Sinn, dies zu tun, daher verstehe ich, woher Sie kommen.

Nun, leider hängt dies von einer übermäßig wörtlichen Auslegung ab, vielleicht von einer Auslegung, die keinen Kontext hat.

Jede E-Mail-Nachricht wird in ihren Headern modifiziert, wenn das Mailsystem sie weiterleitet. Wenn nichts anderes, werden Received:-Header bei jedem Schritt hinzugefügt, und mehrere Systeme fügen verschiedene Header hinzu, die Spamfilterergebnisse und Signaturen anzeigen. Keines davon löst eine Änderung der Message-ID aus, und tatsächlich würde dies die Message-ID völlig funktionsunfähig machen.

Bezüglich des Inhalts wird, wie bereits erwähnt, fast jede Mailingliste dem Textkörper Inhalt hinzufügen, normalerweise eine Fußzeile mit einem Link zur Admin-Seite der Liste oder einem Abmelde-Link. Auch das löst keine Änderung der Message-ID aus.

Tatsächlich ändert fast nichts, das eine Nachricht weiterleitet, die Message-ID. Denn das würde das Threading und die Duplikaterkennung für Endbenutzer-Clients brechen.

Ich sehe, Sie zitieren weiter, was ich gerade zitieren wollte :slight_smile:

5322 besagt auch:

Es gibt viele Fälle, in denen Nachrichten “geändert” werden, aber diese Änderungen stellen keine neue Instanziierung dieser Nachricht dar, und daher würde die Nachricht keine neue Nachrichten-ID erhalten. Zum Beispiel werden beim Einführen von Nachrichten in das Transportsystem oft zusätzliche Header-Felder wie Trace-Felder (beschrieben in Abschnitt 3.6.7) und Resent-Felder (beschrieben in Abschnitt 3.6.6) vorangestellt. Die Hinzufügung solcher Header-Felder ändert nicht die Identität der Nachricht, und daher wird das ursprüngliche “Message-ID:”-Feld beibehalten. In allen Fällen bestimmt die Bedeutung, die der Absender der Nachricht vermitteln möchte (d. h. ob dies dieselbe Nachricht oder eine andere Nachricht ist), ob sich das “Message-ID:”-Feld ändert oder nicht, nicht irgendein bestimmter syntaktischer Unterschied, der in der Nachricht erscheint (oder nicht erscheint).

Ich nehme an, es kommt darauf an, ob sich der Absender der Nachricht ändert, wenn Discourse sie versendet?

Ich glaube, Sie haben hier etwas falsch gelesen. Lassen Sie mich hervorheben:

In allen Fällen bestimmt die Bedeutung, die der Absender der Nachricht
möchte (d. h. ob dies dieselbe Nachricht oder eine andere Nachricht ist), ob sich das “Message-ID:”-Feld ändert

Der Absender ist der Autor, nicht ein MTA wie Discourse.

Wenn ich per E-Mail an Discourse poste, möchte ich, dass meine Nachricht die Leser so erreicht, wie sie ist, semantisch gesehen. Jegliche Zusätze wie Abmelde-Links ändern nicht die Semantik dessen, was ich in meiner Nachricht gesagt habe.

Es ist immer noch dieselbe Nachricht.

Vielleicht sollten wir Resent-Message-ID und Freunde verwenden?

Absolut nicht. Sie sind für einen Benutzer, der eine Nachricht erneut einreicht. Zum Beispiel, wenn ich eine Nachricht an jemand anderen weitergeleitet habe. Sie sind nicht für Mail-Relays (wie Listen und Discourse).

Es war schon immer da, bis zurück zu 822. Aber wie Sie später sagen, ja, es wurde aktualisiert.

Autsch. Ich dachte, es wäre zu dieser Zeit nur USENET. Ich korrigiere mich.

5322 spricht auch direkt darüber, wie Discourse und Github es verwenden:

Das Feld “In-Reply-To:” kann verwendet werden, um die Nachricht (oder Nachrichten) zu identifizieren, auf die die neue Nachricht eine Antwort ist, während das Feld “References:” verwendet werden kann, um einen Gesprächs-“Thread” zu identifizieren.

Möglicherweise leicht unsachgemäß, wahrscheinlich aufgrund des Fehlens eines geeigneten “Thread Identifier”-Headers. Aber diese Interpretation ist vielleicht nicht das, was die RFC-Autoren beabsichtigt haben… sie befasst sich nicht mit Nachrichten mit “References”, aber ohne “In-Reply-To”.

Es sagt mir, dass die beiden Felder dieselbe Information abdecken:

  • References zeigt einen linearen (normalerweise) Thread zurück zum OP
  • In-Reply-To zeigt das übergeordnete Element und impliziert denselben Thread insgesamt mit den vorherigen Nachrichten zurück zum OP

Das knifflige daran ist, dass wir nicht eine E-Mail versenden, sondern N - eine pro Empfänger - damit deren individuelle Metadaten (Abmelden usw.) korrekt sind.

Das ist nicht knifflig. Die Bedeutung der Nachrichten ist dieselbe, die Anpassungen sind geringfügig und semantisch irrelevant. Sie rechtfertigen keine neuen oder unterschiedlichen Message-IDs.

Und ja, ich habe während der Tests starke Hinweise darauf gesehen, dass die Spam-Bestimmung an eine Message-ID gebunden wäre. Wenn sie später wieder gesehen würde (derselbe Benutzer oder ein anderer Benutzer), würde sie viel wahrscheinlicher als Spam markiert werden.

Können Sie einige dieser Fälle zeigen. Denn Message-IDs ermöglichen die Deduplizierung am Ende des Benutzers. Und bedenken Sie, dass viele “Anti-Spam”-Maßnahmen fehlgeleiteter Müll sind. Die Anzahl der Dinge, die ich aus völlig fadenscheinigen Gründen als potenziellen Spam abgelehnt habe… das E-Mail-System zu brechen, um fehlerhafte Spam-Fehlfilterung zu umgehen, ist eine schlechte Wahl.

Bis heute sende ich nie CC an Personen mit GMail-Adressen, weil die Spamfilterung von GMail mich kennt und Dinge auf dem Boden fallen lässt. Wenn ich nur an die Liste sende, bekommen sie es. Wenn ich die GMail-Adresse CC’e, wird sie (a) als Spam markiert und (b) dann wird auch die Mailinglisten-Nachricht als Spam markiert (dieselbe Message-ID!). Der Endbenutzer sieht meine Nachricht nicht. Diese Logik ist völlig fadenscheinig und nicht reparierbar.

Die Vorteile hierbei sind, um fair zu sein, vollständig auf das korrekte Threading von E-Mails in bestimmten E-Mail-Clients ausgerichtet, auf Kosten der Zustellbarkeit.

Seufz. An alle E-Mail-Clients. Und ein Hauptgrund, warum Leute in Pythonland sagen, dass sie einfach nicht zu Discourse wechseln werden, ist, dass das Threading auf der E-Mail-Seite kaputt ist. Viele Leute benutzen keine Foren, weil jedes Forum von ihnen verlangt, dass sie es besuchen. E-Mails kommen zu ihnen, sie können ihren bevorzugten Reader und ihren bevorzugten Editor verwenden, und das Threading ermöglicht es den Leuten, den Gesprächsfluss klar zu sehen. Wenn es funktioniert.

Die aktuelle topic/#{topic_id}/#{post_id}.s#{sender_user_id}r#{receiver_user_id} macht es zumindest konsistent für einen Benutzer in seinem Posteingang. Die Annahme

Mein größtes Anliegen ist die Zustellbarkeit - es ist schon schwer genug, E-Mails zuzustellen, wenn es von den großen Anbietern keine Sichtbarkeit gibt.

Ich möchte Beweise sehen. Mailinglisten machen das weltweit korrekt. Discourse bricht dies definitiv und objektiv. Ich versuche, es zu reparieren.

Lassen Sie mich die beiden grundlegenden Probleme hier wiederholen:

  • Der OP In-Reply-To und References zitieren eine fiktive “Pre-OP”
    “topic” Message-ID, sodass kein E-Mail-Benutzer einen Thread mit einer startenden Nachricht (dem OP) hat - alles, einschließlich des OP, sieht wie eine Nachverfolgung aus.
  • Die über Discourse empfangenen E-Mails und die direkt empfangenen E-Mails, z. B. über CC, haben unterschiedliche Message-IDs, obwohl sie semantisch gesehen dieselbe Nachricht sind; dies bricht das Threading und die Deduplizierung.

Aber ich sehe ein starkes Argument dafür, Discourse im Mailinglisten-Modus mehr wie eine Mailinglisten-Software zu verhalten. @martin Ich glaube, wir passen den Nachrichtentext im Mailinglisten-Modus nicht an? Glauben Sie, es ist sinnvoll, einen strengeren Ansatz beim Beibehalten und Wiederverwenden von Message-IDs im Mailinglisten-Modus zu verfolgen?

Es gibt Leute in Pythonland, die den “Mailinglisten-Modus” als zu viel des Guten empfanden. Sie möchten E-Mails für gezielte Themen erhalten, aber nicht alles. Die Handhabung der Message-ID sollte für alle E-Mail-Seiten gleich sein.

Ich bin ein “Mailinglisten-Modus”-Person auf discuss.python.org. Aber ich habe es hier (discourse.org) aktiviert und es _sofort wieder deaktiviert. Ich brauche hier einen gezielten Modus.

4 „Gefällt mir“

Von Michael Brown via Discourse Meta am 27. Juli 2022 um 22:37 Uhr:

ah! Ich dachte, wir würden bereits Folgendes tun: topic/#{topic_id}/#{post_id}.s#{sender_user_id}r#{receiver_user_id}

{receiver_user_id} bringt Sie zu eindeutigen Nachrichten-IDs pro Endbenutzer für denselben Quellbeitrag. Das ist schlecht, sobald Endbenutzer außerhalb von Discourse kommunizieren oder Kopien nicht über Discourse erhalten.

Ich wäre geneigt, im Interesse des Ausgleichs der Bedenken hinsichtlich E-Mail-Einzigartigkeit und Zustellbarkeit gegenüber denen des Mailinglistenmodus, (2) für den Mailinglistenmodus deaktiviert und (3) für den Mailinglistenmodus aktiviert zu tun.

Und wie in meinem letzten Beitrag erwähnt, deckt der Mailinglistenmodus nur eine Art des Empfangs von Discourse-E-Mails ab. Alle gleichen Bedenken gelten, unabhängig davon, ob der E-Mail-Empfänger im Mailinglistenmodus ist oder nur im E-Mail-für-einige-Themen/Tags-Modus.

Ebenso wäre ich mit dem References-Header geneigt, ihn für Beitrag Nr. 1 in einem Thema nicht vorhanden zu haben.

Ebenso der In-Reply-To. Keiner sollte vorhanden sein, da sie, um vorhanden zu sein, eine fiktive Nachricht an den OP referenzieren müssen.

und ihn auf das Thema (also topic/#{topic_id}) und den Beitrag beziehen, auf den er antwortet, falls vorhanden.

Sie können sich nicht auf die “Themen”-Nachrichten-ID beziehen, es sei denn, es gab einen Beitrag mit dieser Nachrichten-ID, der als E-Mail gesendet wurde. Wenn Sie diesen Weg gehen wollen, behandeln Sie die Nachrichten-ID des OP als Sonderfall, um die “Themen”-Nachrichten-ID anstelle von ...../1 zu sein.

3 „Gefällt mir“

Das sollte „vorher-OP“ sein. Entschuldigung, Cameron Simpson

Wie Sie sagen, ist das genau das Problem, das uns frustriert:

Ich stimme zu, dass dies geändert werden sollte. Die OP-Nachrichten-ID sollte (mangels einer eingehenden E-Mail) (vereinfacht) topic/1 sein und sich nicht auf eine andere Nachricht beziehen.

Die Nachrichten-ID würde sich nicht ändern, auch wenn es sich nur um einen Discourse-Post und niemals um eine E-Mail handeln würde.

Weitere Nachrichten können sich auf diese beziehen.

Warum muss eine E-Mail existieren? Semantisch passt die Existenz nur des Posts zu den Kriterien. Die Nachricht, auf die geantwortet wird, existiert, nur nicht im E-Mail-Ordner dieser Person. Wir sind gerade zu dem Schluss gekommen, dass die Nachricht das Wichtige ist, sei es der Post-Text oder der E-Mail-Text. Daraus folgt, dass topic/#{topic_id}/1@site eine eindeutige Nachrichten-ID ist, die sich auf diesen Post bezieht, unabhängig davon, ob er in einer E-Mail-Nachricht enthalten ist oder nicht.

Es ist nicht anders, als eine Antwort auf eine E-Mail zu erhalten, die sich auf eine E-Mail bezieht, die nicht in Ihrem Posteingang ist. Es ist immer noch eine Antwort, daher ist References legitim und korrekt.

Grundsätzlich stimme ich Ihnen zu. Der Purist in mir möchte, dass dies korrekt ist. Aber die Praktikabilität, E-Mails in die Posteingänge der Leute zu bekommen, hat dazu geführt. Zum Schlechteren nutzen viele Leute Gmail und trainieren seine Filter nie, nutzen es richtig und “Abmelden” durch Melden als Spam[1].

Ich stimme zu, ich glaube, wir haben etwas zu wörtlich gelesen

Eine Nachrichten-ID bezieht sich auf genau eine Instanziierung einer bestimmten Nachricht

Nachdem ich dies eine Weile überdacht habe, denke ich, wir sollten zu dem zurückkehren, was wir vorher hatten (Zufälligkeit entfernen) und eine einzige Nachrichten-ID pro Post festlegen, und zwar:

  • message_id_from_incoming_email || topic/#{topic_id}/#{post_num}@site (post_num des OP ist 1)

Und wann immer wir eine E-Mail senden, denke ich, ist es richtig, References zu den Eltern bis zurück zum OP hinzuzufügen und In-Reply-To auf die entsprechende stabile Post-Nachrichten-ID (oder den OP, wenn auf das Thema geantwortet wird) zu setzen, da die Nachricht der Post ist. Aber diese Felder für den OP sollten leer sein, ja.


  1. nicht, dass Gmail uns dies meldet, obwohl wir Feedback-Loop implementiert haben. ↩︎

5 „Gefällt mir“

[quote=„Cameron Simpson, Beitrag:26, Thema:233499, Benutzername:cameron-simpson"]
Lassen Sie mich die beiden grundlegenden Probleme hier wiederholen:

  • Der OP In-Reply-To und References zitiert eine fiktive „Pre-OP“-Nachrichten-ID „topic“, sodass kein E-Mail-Benutzer einen Thread mit einer Startnachricht (dem OP) hat – alles, einschließlich des OP, sieht wie eine Antwort aus.
  • Die über Discourse empfangenen E-Mails und die direkt z. B. über CC empfangenen E-Mails haben unterschiedliche Nachrichten-IDs, obwohl sie semantisch gesehen dieselbe Nachricht sind; dies beeinträchtigt das Threading und die Deduplizierung.
    [/quote]

[quote=„Cameron Simpson, Beitrag:21, Thema:233499, Benutzername:cameron-simpson"]
Aber beachten Sie: Die Nachrichten-ID muss nur stabil und eindeutig sein. Wenn der topic/:topid_id/:post_id@host stabil ist und niemals neu generiert wird, reicht das aus.
[/quote]

[quote=„Michael Brown, Beitrag:30, Thema:233499, Benutzername:supermathie"]
Nachdem ich dies eine Weile überdacht habe, denke ich, wir sollten zu dem zurückkehren, was wir vorher hatten (Zufälligkeit entfernen) und eine einzige Nachrichten-ID pro Beitrag festlegen, und zwar:

  • message_id_from_incoming_email || topic/#{topic_id}/#{post_num}@site (post_num des OP ist 1)

Und wann immer wir eine E-Mail senden, denke ich, ist es richtig, References zu den Eltern bis zurück zum OP hinzuzufügen und In-Reply-To auf die entsprechende stabile Post-Nachrichten-ID (oder den OP, wenn auf das Thema geantwortet wird) zu setzen, da die Nachricht der Beitrag ist. Aber diese Felder für den OP sollten leer sein, ja.
[/quote]

Vielen Dank für Ihre Antworten @supermathie und @cameron-simpson. Ich glaube, wir haben einen Konsens erreicht. Ich fasse die TODOs in einem einzigen Beitrag zusammen und hoffe, bald mit der Arbeit daran beginnen zu können:

  1. Ändern Sie das Format der generierten Message-ID so, dass es immer \u003cdiscourse/post/:post_id@:hostname\u003e lautet. Dies ist eindeutig genug, es ist im Grunde eine Rückkehr zu dem, was wir früher getan haben. Beim Verweis auf den OP wird jetzt die ID des ersten Beitrags anstelle der reinen Themen-ID verwendet.
  2. Wenn ein Beitrag einen zugehörigen IncomingEmail-Datensatz hat, verwenden wir immer diese Message-ID, wenn wir eine E-Mail senden, andernfalls generieren wir eine mit dem obigen Format.
  3. Verwenden Sie keine References, wenn Sie E-Mails für den OP des Themas senden. Es gibt noch nichts, worauf verwiesen werden kann, da es die erste E-Mail im Thread ist.
  4. Stellen Sie sicher, dass die richtigen Header In-Reply-To und References basierend auf PostReply-Datensätzen generiert werden.

Dies hat das Potenzial, die Thread-Situation für bereits gesendete E-Mails etwas unübersichtlich zu machen, aber ich werde mein Bestes tun, um während einer Übergangszeit auch das Format zu unterstützen, von dem wir uns abwenden. Danke für Ihre Geduld!

3 „Gefällt mir“

Nur zur Klarstellung … dies wäre nicht der hostname des Servers, von dem dies stammt, sondern die URL der Website? Wenn es sich um den Hostnamen handelt, verlieren wir alle Stabilität, wenn 3 verschiedene Hosts dieselbe Website bedienen.

1 „Gefällt mir“

Entschuldigung, ja, ich meine die Website-Domain, z. B. meta.discourse.org, die von Email::Sender.host_for(Discourse.base_url) stammt, was wir bereits verwenden.

2 „Gefällt mir“

Guter Punkt, habe nicht an Verschiebungen gedacht. Ist :post_id die ID des Beitrags (post.id) oder die Nummer (innerhalb des Themas)?

Wenn es die Beitrags-ID ist, können wir vereinfachen und einfach \u003cpost/:post_id@:hostname\u003e verwenden, da sich diese nie ändert. Dann müssen wir die Message-ID nicht speichern, es sei denn, sie wird vom Standard überschrieben.

Wenn nicht … können wir hier genauso gut die Beitrags-ID verwenden? Es gibt keinen Grund, warum dieser Teil lang sein muss, er muss nur eindeutig sein.

2 „Gefällt mir“

Es ist die tatsächliche ID, nicht die Post-Nummer.

Das ist ein guter Punkt. \u003cpost/:post_id@:hostname\u003e wird wahrscheinlich gut funktionieren und vermeidet die zusätzliche Spalte. Um es spezifischer für Discourse zu machen, könnten wir discourse vorne hinzufügen, z. B. \u003cdiscourse/post/543563@meta.discourse.org\u003e (wobei zu bedenken ist, dass viele Websites keine Erwähnung von Discourse im Hostnamen haben). Es ist zu diesem Zeitpunkt Haarspalterei.

Ich werde versuchen, Wege zu finden, wie das schiefgehen kann. Ich schätze, wenn Sie einen Beitrag in ein anderes Thema verschieben und dann jemand per E-Mail auf den Beitrag antwortet, wird seine Antwort im neuen Thema und nicht im ursprünglichen Thema landen. Vielleicht ist das in Ordnung? Ein weiteres Risiko besteht darin, dass der Beitrag in eine private Kategorie verschoben wird, aber ich glaube, wir haben bereits das gleiche Risiko und wir gehen damit um.

Ich denke nur laut nach, es sollte in Ordnung sein, ich werde diese Dinge abdecken, wenn ich die Änderungen teste :+1:

2 „Gefällt mir“

Das Argument für die Einbeziehung von topic_id ist, dass man die Threadbildung absichtlich unterbrechen kann, wenn Leute einen Beitrag aus einem Thema in ein anderes Thema aufteilen.

Ich bin unschlüssig. Kann in beide Richtungen gehen. Aber das wäre die Idee.

1 „Gefällt mir“

Das Argument für die Verwendung nur der Beitrags-ID ist, dass sie statischer ist, was wir wollen, da die Beitrags-ID in der Message-ID gleich bleibt, auch wenn Sie einen Beitrag in ein anderes Thema verschieben, das Thema jedoch nicht dasselbe ist.

Ich glaube, wenn wir den Beitrag verschieben und E-Mails aus dem neuen Thema senden, wird der neue Thread im E-Mail-Client trotzdem korrekt erstellt, da die Header-Ketten References und In-Reply-To unterschiedlich sein werden. Wie auch immer, ich werde sicherstellen, dass ich dieses Szenario teste und sehe, ob es auch das tut, was wir erwarten. Nichts wird in den Kern integriert, bis die verschiedenen Szenarien wie erwartet funktionieren.

1 „Gefällt mir“

Basierend auf diesen weiteren Diskussionen @cameron-simpson habe ich die TODOs wie folgt aktualisiert und hier gepostet, damit Sie das Update erhalten, da die Discourse-Bearbeitungen nicht per E-Mail ankommen:

  1. Ändern Sie das generierte Message-ID-Format so, dass es immer \u003cdiscourse/post/:post_id@:hostname\u003e lautet. Dies ist eindeutig genug, es ist im Grunde eine Rückkehr zu dem, was wir früher gemacht haben. Das Verweisen auf den OP verwendet nun die ID des ersten Beitrags anstelle der reinen Themen-ID.
  2. Wenn ein Beitrag einen zugehörigen IncomingEmail-Datensatz hat, verwenden wir immer diese Message-ID, wenn wir E-Mails senden, andernfalls generieren wir eine im obigen Format.
  3. Fügen Sie eine neue Spalte outbound_message_id zu den Post-Datensätzen hinzu, die entweder a) die Message-ID der eingehenden E-Mail enthält, wenn sie den Beitrag erstellt, oder b) die ausgehende Message-ID, die wir im Falle von Beiträgen generieren, die über die Discourse-Weboberfläche erstellt wurden.
  4. Verwenden Sie keine References- oder In-Reply-To-Header, wenn Sie E-Mails für den OP des Themas senden. Es gibt noch nichts zu Reference oder zu beantworten, da es die erste E-Mail im Thread ist.
  5. Stellen Sie sicher, dass die richtigen In-Reply-To- und References-Header basierend auf PostReply-Datensätzen generiert werden.
1 „Gefällt mir“

Deckt dies auch Zitate ab (z. B. ein Beitrag, der 10 verschiedene andere Beiträge zitiert, also auf sie verweist)?

1 „Gefällt mir“

Von Sam Saffron via Discourse Meta am 29. Juli 2022 um 02:31 Uhr:

Decken dies auch Zitate ab (z. B. ein Beitrag, der 10 verschiedene andere Beiträge zitiert, also bezieht er sich auf sie?)

In-Reply-To kann nur einen Vorgänger zitieren, wählen Sie also einen aus. References kann sich auf mehr als einen beziehen, aber die RFC empfiehlt dies ausdrücklich nicht, da nicht alle Client-Anwendungen andere als eine lineare Kette von diesem Beitrag zurück zum OP erwarten.

Ich wäre mit beidem für die References einverstanden, würde aber zum Konservativen tendieren. Die einfache Berechnung lautet:

  • In-Reply-To: Verwenden Sie die message-id der ersten zitierten Nachricht (oder welches einzelne Zitat Sie auch immer nach einer bestimmten Richtlinie auswählen)
  • References: Die References desselben einzelnen ausgewählten Vorgängerbeitrags oben plus die message-id desselben Beitrags

Diese wären stabil, vorhersehbar und korrekt.

Viele Grüße,
Cameron Simpson cs@cskk.id.au

2 „Gefällt mir“

References wird auf diese Weise als nicht empfohlen angesehen:

Hinweis: Einige Implementierungen analysieren das Feld „References:“, um den „Diskussionsfaden“ anzuzeigen. Diese Implementierungen gehen davon aus, dass jede neue Nachricht eine Antwort auf ein einzelnes Elternteil ist und sie daher das Feld „References:“ rückwärts durchlaufen können, um das Elternteil jeder dort aufgeführten Nachricht zu finden. Daher wird versucht, ein Feld „References:“ für eine Antwort mit mehreren Eltern zu erstellen, nicht empfohlen; wie dies zu tun ist, ist in diesem Dokument nicht definiert.

2 „Gefällt mir“

Von Martin Brennan via Discourse Meta am 29.07.2022 01:57:

Basierend auf diesen weiteren Diskussionen habe ich @cameron-simpson die TODOs aktualisiert
zu diesem, und sie hier gepostet, damit Sie die Aktualisierung erhalten, da die Discourse
Bearbeitungen nicht per E-Mail ankommen:

  1. Ändern Sie das generierte Message-ID-Format so, dass es immer \u003cdiscourse/post/:post_id@:hostname\u003e lautet. Dies ist eindeutig genug, es ist im Grunde eine Rückkehr zu dem, was wir früher getan haben. Wenn auf den OP verwiesen wird, wird jetzt die ID des ersten Beitrags anstelle der reinen Topic-ID verwendet.
  2. Wenn ein Beitrag einen zugehörigen IncomingEmail-Datensatz hat, verwenden wir immer diese Message-ID, wenn wir eine E-Mail senden, andernfalls generieren wir eine mit dem obigen Format.
  3. Verwenden Sie keine References, wenn Sie E-Mails für den OP des Themas versenden. Es gibt noch nichts, worauf verwiesen werden kann, da es die erste E-Mail im Thread ist.

Ich würde auch die In-Reply-To-Angabe in den OP-E-Mails weglassen.

  1. Stellen Sie sicher, dass die korrekten Header In-Reply-To und References
    basierend auf PostReply-Datensätzen generiert werden.

Ja.

Persönlich würde ich den Schritt weiter gehen und eine Spalte für die
E-Mail-seitige Message-ID haben. Auf diese Weise, sobald Sie eine Message-ID für
den Beitrag zugewiesen haben (aus der Quell-E-Mail, wenn von E-Mail, oder generiert, wenn von der
Weboberfläche), bleibt diese stabil, unabhängig davon, was sonst im Code passieren mag, jetzt oder später. D.h. selbst wenn kein IncomingEmail vorhanden ist,
erfolgt die Generierung der Message-ID nur einmal, anstatt neu berechnet zu werden (was somit geändert werden könnte).

D.h. machen Sie sie stabil, sobald sie erstellt wurde, indem Sie sie speichern.

Sie haben anscheinend eine IncomingEmail-Beziehung. Vielleicht haben Sie
(oder könnten Sie verwenden) eine OutgoingEmail-Beziehung für den zusätzlichen Zustand für die ausgehenden E-Mail-Nachrichten, die beim ersten Weiterleiten eines Beitrags per
E-Mail erstellt wird.

Ich weiß, dass der Ablauf im Grunde darin besteht, dass dies geschieht, wenn ein Beitrag erstellt wird, aber ich kann mir vorstellen, dass einige spätere Benutzerfunktionen Dinge wie:

  • Bitte leiten Sie mir E-Mails für dieses ganze Thema weiter, jetzt, wo ich interessiert bin
  • Wenn ein Beitrag bearbeitet wird, senden Sie die aktualisierte Nachricht mit derselben Message-ID aus

Der Grund, warum mir das zweite Beispiel einfällt, ist, dass wir mehr
zu berichten haben :slight_smile: Eines ist, dass Discourse einige Anstrengungen unternimmt, um den zitierten Teil von Top-Antworten wegzulassen, um den Beitrag kürzer zu halten oder
etwas Ähnliches. Ich habe vor ein paar Wochen in der Python-Community einen langen Beitrag geschrieben, der stark gekürzt wurde. Ich habe ihn im Forum mit dem Originaltext aus meiner persönlichen Kopie bearbeitet. Aber ein Empfänger sagte, er habe die vollständige Version erhalten, und ich habe mich gefragt, ob Discourse Bearbeitungsaktualisierungen als Ersatznachrichten mit derselben ID versendet. Was ziemlich raffiniert wäre, je nachdem, wie der Endbenutzerclient damit umgeht.

1 „Gefällt mir“

Von Martin Brennan via Discourse Meta am 29. Jul 2022 00:36:

  1. Füge eine neue outbound_message_id zur Post-Tabelle hinzu, damit wir sicher sein können, dass der Thread überlebt, auch wenn ein Beitrag von Thema zu Thema verschoben wird oder etwas Ähnliches. Speichere hier die Message-ID für beide oben genannten Fälle.

Ja, ich denke, das ist wichtig, unabhängig davon, wie es implementiert ist (Beziehung oder Spalte oder was auch immer). Ich glaube, das habe ich in deinen überarbeiteten TODOs gesagt.

  1. Verwende keine References, wenn E-Mails für den OP des Themas gesendet werden. Es gibt noch nichts zu Reference, da es die erste E-Mail im Thread ist.
  2. Stelle sicher, dass die korrekten In-Reply-To- und References-Header basierend auf PostReply-Datensätzen und der neuen outbound_message_id-Spalte in der Post-Tabelle generiert werden.

Dies birgt das Potenzial, dass die Thread-Situation für bereits gesendete E-Mails etwas unklar wird, aber ich werde mein Bestes tun, um auch für eine Übergangszeit das Format zu unterstützen, von dem wir uns abwenden. Danke für deine Geduld!

Für die bestehenden E-Mails können wir nichts tun. Sorge einfach dafür, dass die Threads zukünftig gut verknüpft sind!

Danke!
Cameron Simpson cs@cskk.id.au

1 „Gefällt mir“

Wir haben EmailLog, aber diese Einträge werden alle 90 Tage bereinigt, und ich glaube nicht, dass es gut passen würde. Ich werde das einfach so machen:

1 „Gefällt mir“

Es ging darum, es gar nicht erst zu speichern… aber wenn ich darüber nachdenke, wird sich die Post-ID niemals ändern, aber der Hostname könnte es. Also sollten wir es in allen Fällen sofort nach dem Speichern speichern.

Es könnte nicht schaden, messageid für jeden Post als Eigenschaft zu haben, für immer unveränderlich…

Wäre das nicht eine andere Version der Nachricht? Aus der Spezifikation:

Das Feld „Message-ID:“ stellt eine eindeutige Nachrichten-ID bereit, die sich auf eine bestimmte Version einer bestimmten Nachricht bezieht. … Eine Nachrichten-ID bezieht sich auf genau eine Version einer bestimmten Nachricht; nachfolgende Überarbeitungen der Nachricht erhalten jeweils neue Nachrichten-IDs.

Also sollte unsere generierte message-id wahrscheinlich lauten: \u003cdiscourse/post/:post_id/rev/:revision_num\u003e (möglicherweise lässt man /rev/:revision_num für die erste Revision weg). Dies würde es E-Mail-Empfängern ermöglichen, die Bearbeitungsaktualisierungen überhaupt zu erhalten, wenn man bedenkt, dass

1 „Gefällt mir“

Ja, das werde ich tun. Was diese anderen Diskussionen über Bearbeitungen und Überarbeitungen angeht, so denke ich, dass das ein ganz anderer riesiger Fischtopf ist, in den wir uns im Moment nicht einlassen sollten… lasst uns zuerst unsere Threading-Sünden beheben :slight_smile:

1 „Gefällt mir“