セルフホスト、2026.1.5 (コミット 2727e4d)。私たちはメーリングリストモードでコミュニティを運営しており、返信はメールで行っています。
あるメンバーが Outlook からかなり長い投稿で返信したところ、サイトに表示されたコピー(そしてリストに再配信されたもの)は途中までしか表示されませんでした。最初の番号付きリスト以降のすべての内容は完全に消えていました。エラーもログにも何も記録されておらず、投稿はただ文の途中で終わっていました。
最初に気になったのは、同じメールの前半にあった箇条書きリストが正常に表示されていたことです。番号付きリストとその後の内容だけが切り捨てられていました。
これは lib/email/receiver.rb の extract_from_word メソッドが原因です。Outlook/Word メールの場合、.WordSection1 の子要素のうち、
や
ではない最初の要素を署名または転送メッセージの開始と見なし、それとその後のすべての兄弟要素を削除します:
elided =
doc.css(
“.WordSection1 > :not(p):not(ul):first-of-type, .WordSection1 > :not(p):not(ul):first-of-type ~ *”,
).remove
Outlook は番号付きリストを
としてレンダリングしますが、セレクターは ol を除外していません。そのため、番号付きリストは「p でも ul でもない」最初の要素となり、レシーバーはそこでメッセージを切り捨ててしまいます。箇条書きリスト () は除外されているため、それらは残りますが、番号付きリストは残らないのです。
再現手順
- Outlook(デスクトップ版)から通知に返信します。段落、番号付きリスト、そして別の段落の順に記述します。
- 作成された投稿は番号付きリストまでのテキストを保持し、リストとその下のすべてを削除します。
これを引き起こす最小限の HTML ボディ(レシーバーのテストに簡単に組み込めます):
導入の段落。
手順:
- 1番目
- 2番目
この末尾の段落も消えてしまいます。
結果として得られるのは、2つの導入段落のみです。
これは main ブランチでもまだ存在しており、セレクターは変更されていません。まずバグカテゴリを検索しましたが、すでに報告されているものは見つかりませんでした。
修正案
番号付きリストはコンテンツであり署名ではないため、
を と同じように扱います:
“.WordSection1 > :not(p):not(ul):not(ol):first-of-type, .WordSection1 > :not(p):not(ul):not(ol):first-of-type ~ *”
これにより、リストは保持され、実際の署名や転送マーカー(テーブル、div、hr、画像)は引き続き省略されます。必要であれば、フィクスチャメールと失敗するテストを含む PR を作成できます。
「いいね!」 1
うーん、まずはサイトをアップデートしてみてください。お使いのバージョンが最新ではないので、その間に修正されている可能性があります。
ふーむ。管理画面の Discourse ステータスでは、最新バージョンにアップデート済みで実行中と表示されています。かなり奇妙ですね。
どうやら、私は ESR の最新バージョンを実行しているようです。とりあえず回避策があります。自作のプラグインが多数あり、回避策を使っているので、高トラフィックの本番サーバーをテストのためにリスクに晒すつもりはありません。後でアップグレードしたときに修正されているか確認するしかありません。
おっと、もしかしたらリリースリストを誤読していたかもしれません。はい、あなたのバージョンはまだサポートされていると思います。
再現(および修正)を容易にするために使用できる、そのようなメールの例はありますか?PIIデータを削除した.emlファイルを気軽にDMで送ってください。
新ユーザーなので、ファイルをアップロードできません。また、DMを送れる場所を探しましたが、どこにも見つからず、おそらくDM機能も無効になっているようです。ご不便をおかけして申し訳ありません。
信頼レベルを上げたので、今では私のアバターをクリックしてMessageボタンが表示されるはずです 
完了しました。ありがとうございます。感謝申し上げます。
詳細なレポートとテスト用メールをありがとうございます @ryanturner 
このバグは
によって修正されます。
「いいね!」 1