Autoalojado, 2026.1.5 (commit 2727e4d). Operamos una comunidad en modo lista de correo y recibimos las respuestas por email.
Un miembro respondió desde Outlook con un mensaje bastante largo, y la copia que apareció en el sitio —y que se reenvió a la lista— se cortó a mitad de camino. Todo lo que venía después de su primera lista numerada simplemente había desaparecido. Sin errores, nada en los registros, el mensaje simplemente terminó a mitad de frase.
Lo que me llamó la atención al principio: las listas con viñetas anteriores en el mismo email llegaron bien. Solo la lista numerada se cortó, junto con todo lo que venía después.
El problema está en extract_from_word en lib/email/receiver.rb. Para correos de Outlook/Word, trata al primer hijo de .WordSection1 que no sea <p> o <ul> como el inicio de una firma o mensaje reenviado, y lo elimina junto con todos los siguientes elementos hermanos:
elided =
doc.css(
".WordSection1 > :not(p):not(ul):first-of-type, .WordSection1 > :not(p):not(ul):first-of-type ~ *",
).remove
Outlook renderiza las listas numeradas como <ol>, y el selector no excluye ol. Por lo tanto, la lista numerada es el primer elemento “no p, no ul”, y el receptor corta el mensaje justo ahí. Las listas con viñetas (<ul>) están excluidas, por lo que esas sí llegan, pero la numerada no.
Reproducción
- Desde Outlook (escritorio), responde a una notificación. Escribe un párrafo, luego una lista numerada y luego otro párrafo.
- El mensaje creado conserva el texto hasta la lista numerada y descarta la lista y todo lo que viene después.
Cuerpo HTML mínimo que lo provoca (fácil de incluir en una prueba del receptor):
<div class=WordSection1>
<p class=MsoNormal>Párrafo introductorio.</p>
<p class=MsoNormal>Pasos:</p>
<ol><li>Primero</li><li>Segundo</li></ol>
<p class=MsoNormal>Este párrafo final también desaparece.</p>
</div>
Solo recibirás los dos párrafos introductorios.
Sigue presente en main; el selector no ha cambiado. Busqué primero en la categoría de errores y no encontré que este ya hubiera sido reportado.
Corrección sugerida
Tratar <ol> igual que <ul>, ya que una lista numerada es contenido, no una firma:
".WordSection1 > :not(p):not(ul):not(ol):first-of-type, .WordSection1 > :not(p):not(ul):not(ol):first-of-type ~ *"
Esto conserva la lista y sigue eliminando las marcas reales de firma/reenvío (tablas, divs, hr, imágenes). Estaré encantado de abrir una PR con un email de prueba y una prueba fallida si eso ayuda.