E-Mail-Antwort in Outlook löscht alles nach einer nummerierten Liste

Selbst gehostet, Version 2026.1.5 (Commit 2727e4d). Wir betreiben eine Community im Mailinglisten-Modus und nehmen Antworten per E-Mail entgegen.

Ein Mitglied antwortete von Outlook aus mit einem ziemlich langen Beitrag, und die Kopie, die auf der Website angezeigt wurde – und an die Liste zurückgesendet wurde –, wurde mitten im Text abgeschnitten. Alles ab der ersten nummerierten Liste war einfach verschwunden. Kein Fehler, nichts in den Logs, der Beitrag endete einfach mitten im Satz.

Was mich zunächst verwirrte: Die Aufzählungszeichen (Bullet Points) weiter oben in derselben E-Mail kamen einwandfrei an. Nur die nummerierte Liste wurde gestutzt, sowie alles, was danach folgte.

Das Problem liegt in extract_from_word in lib/email/receiver.rb. Für Outlook/Word-Mails behandelt es das erste Kind-Element von .WordSection1, das kein <p> oder <ul> ist, als den Beginn einer Signatur oder einer weitergeleiteten Nachricht und entfernt es zusammen mit allen folgenden Geschwisterelementen:

elided =
doc.css(
“.WordSection1 > :not(p):not(ul):first-of-type, .WordSection1 > :not(p):not(ul):first-of-type ~ *”,
).remove

Outlook rendert nummerierte Listen als <ol>, und der Selektor schließt <ol> nicht aus. Daher ist die nummerierte Liste das erste Element, das weder <p> noch <ul> ist, und der Empfänger kürzt die Nachricht genau an dieser Stelle. Aufzählungslisten (<ul>) sind ausgeschlossen, weshalb diese erhalten bleiben, die nummerierte Liste jedoch nicht.

Reproduktion

  1. Antworte von Outlook (Desktop) aus auf eine Benachrichtigung. Schreibe einen Absatz, dann eine nummerierte Liste und dann einen weiteren Absatz.
  2. Der erstellte Beitrag behält den Text bis zur nummerierten Liste bei und entfernt die Liste sowie alles darunter.

Minimaler HTML-Body, der das Problem auslöst (einfach in einen Receiver-Spec einfügen):

Einführungsabsatz.

Schritte:

  1. Erster
  2. Zweiter

Auch dieser abschließende Absatz verschwindet.

Du erhältst nur die beiden Einführungsabsätze zurück.

Das Problem besteht weiterhin auf main – der Selektor hat sich nicht geändert. Ich habe zunächst die Kategorie „Bug“ durchsucht und diesen Eintrag nicht bereits gemeldet gefunden.

Vorgeschlagene Lösung

Behandle <ol> wie <ul>, da eine nummerierte Liste Inhalt und keine Signatur ist:

“.WordSection1 > :not(p):not(ul):not(ol):first-of-type, .WordSection1 > :not(p):not(ul):not(ol):first-of-type ~ *”

Damit bleibt die Liste erhalten, und echte Signatur-/Weiterleitungs-Marker (Tabellen, Divs, horizontale Linien, Bilder) werden weiterhin entfernt. Ich kann gerne einen PR mit einer Beispiel-E-Mail und einem fehlschlagenden Spec öffnen, falls das hilfreich ist.

Hmm, könnten Sie zunächst versuchen, Ihre Website zu aktualisieren? Da Ihre Version nicht die neueste ist, könnte das Problem möglicherweise bereits behoben worden sein.

Hmm. Der Discourse-Status in meinem Admin-Bereich besagt, dass ich auf dem neuesten Stand bin und die aktuelle Version ausführe. Wirklich seltsam.