La risposta via email da Outlook elimina tutto ciò che segue un elenco numerato

Self-hosted, 2026.1.5 (commit 2727e4d). Gestiamo una comunità in modalità mailing-list e riceviamo le risposte via email.

Un membro ha risposto da Outlook con un post piuttosto lungo, e la copia apparsa sul sito — e rimandata alla lista — è stata troncata a metà. Tutto ciò che seguiva la prima lista numerata è semplicemente scomparso. Nessun errore, nulla nei log, il post si è semplicemente interrotto a metà frase.

Ciò che mi ha sorpreso inizialmente: le liste con punti elenco presenti più indietro nella stessa email erano arrivate correttamente. Solo la lista numerata è stata tagliata, insieme a tutto ciò che seguiva.

Il problema risiede in extract_from_word in lib/email/receiver.rb. Per le email di Outlook/Word, considera il primo figlio di .WordSection1 che non sia un <p> o un <ul> come l’inizio di una firma o di un messaggio inoltrato, e lo rimuove insieme a tutti gli elementi fratelli successivi:

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

Outlook rende le liste numerate come <ol>, e il selettore non esclude <ol>. Quindi la lista numerata è il primo elemento “non p, non ul”, e il ricevitore tronca il messaggio proprio lì. Le liste con punti elenco (<ul>) sono escluse, ecco perché queste sopravvivono mentre quella numerata no.

Riproduzione

  1. Da Outlook (desktop), rispondi a una notifica. Scrivi un paragrafo, poi una lista numerata, poi un altro paragrafo.
  2. Il post creato conserva il testo fino alla lista numerata e scarta la lista e tutto ciò che segue.

Corpo HTML minimo che lo innesca (facile da inserire in uno spec del ricevitore):

Paragrafo introduttivo.

Passaggi:

  1. Primo
  2. Secondo

Anche questo paragrafo finale scompare.

Otterrai solo i due paragrafi introduttivi.

Il problema è ancora presente su main — il selettore non è cambiato. Ho cercato nella categoria bug e non ho trovato questo problema già segnalato.

Correzione suggerita

Trattare <ol> allo stesso modo di <ul>, poiché una lista numerata è contenuto, non una firma:

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

Questo mantiene la lista e continua a elidere le vere firme/marchi di inoltramento (tabelle, div, hr, immagini). Sono felice di aprire una PR con un’email di test e uno spec che fallisce, se può essere utile.

1 Mi Piace

Mmm, potresti provare a aggiornare prima il tuo sito? Dato che la tua versione non è l’ultima, è possibile che il problema sia stato risolto nel frattempo.

Mmm. Lo stato di Discourse nel mio pannello di amministrazione dice che sono aggiornato e sto eseguendo l’ultima versione. Davvero strano.

Quindi vedo che sto eseguendo l’ultima versione dell’ESR. Per il momento ho una soluzione alternativa. Ho scritto molti plugin e, con questa soluzione temporanea, non intendo rischiare di testare su un server di produzione ad alto traffico. Dovrò semplicemente aspettare di fare l’aggiornamento in un secondo momento e vedere se il problema è stato risolto.

Oops, forse ho frainteso l’elenco delle versioni. Sì, credo che la tua versione sia ancora supportata.

Hai un esempio di tale e-mail che potremmo utilizzare per facilitare la riproduzione (e quindi la correzione)? Sentiti libero di inviarmi in privato un file .eml (con i dati PII oscurati).

Come nuovo utente, non posso caricare un file. E ho cercato ovunque senza trovare dove inviarti un messaggio privato, quindi potrebbe essere anche quella funzione disabilitata. Mi dispiace renderti le cose difficili.

Ho aumentato il tuo livello di fiducia, quindi dovresti essere in grado di fare clic sul mio avatar e vedere un pulsante Invia messaggio :wink:

Fatto. Grazie. Apprezzo molto.