Resposta por e-mail no Outlook exclui tudo após uma lista numerada

Auto-hospedado, 2026.1.5 (commit 2727e4d). Operamos uma comunidade no modo de lista de discussão e recebemos respostas por e-mail.

Um membro respondeu pelo Outlook com uma mensagem bastante longa, e a cópia que apareceu no site — e foi reenviada para a lista — foi cortada no meio. Tudo a partir da primeira lista numerada em diante simplesmente desapareceu. Nenhum erro, nada nos logs, a mensagem simplesmente terminou no meio de uma frase.

O que me chamou a atenção inicialmente: as listas com marcadores (bullet points) no início do mesmo e-mail chegaram corretamente. Apenas a lista numerada foi cortada, junto com tudo que vinha depois.

O problema está em extract_from_word em lib/email/receiver.rb. Para e-mails do Outlook/Word, ele trata o primeiro filho de .WordSection1 que não seja <p> ou <ul> como o início de uma assinatura ou mensagem encaminhada, e o remove junto com todos os elementos irmãos subsequentes:

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

O Outlook renderiza listas numeradas como <ol>, e o seletor não exclui <ol>. Portanto, a lista numerada é o primeiro elemento “não <p>, não <ul>”, e o receptor corta a mensagem exatamente ali. Listas com marcadores (<ul>) são excluídas, o que explica por que elas são preservadas e a lista numerada não.

Reprodução

  1. Pelo Outlook (desktop), responda a uma notificação. Escreva um parágrafo, depois uma lista numerada e, em seguida, outro parágrafo.
  2. A publicação criada mantém o texto até a lista numerada e remove a lista e tudo abaixo dela.

Corpo HTML mínimo que aciona o problema (fácil de inserir em um teste de receptor):

Parágrafo introdutório.

Passos:

  1. Primeiro
  2. Segundo

Este parágrafo final também desaparece.

Você recebe apenas os dois parágrafos introdutórios.

Ainda presente na branch principal — o seletor não mudou. Pesquisei na categoria de bugs primeiro e não encontrei esse problema já reportado.

Correção sugerida

Tratar <ol> da mesma forma que <ul>, já que uma lista numerada é conteúdo, não uma assinatura:

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

Isso preserva a lista e ainda remove as marcas reais de assinatura/encaminhamento (tabelas, divs, hr, imagens). Fico feliz em abrir um PR com um e-mail de teste e um teste falhando, se isso for útil.

1 curtida

Hmm, você poderia tentar atualizar seu site primeiro? Como sua versão não é a mais recente, isso pode ter sido corrigido ao longo do caminho.

Hmmm. O status do Discourse no meu painel de administração diz que estou atualizado e executando a versão mais recente. Bem estranho.

Então, vejo que estou executando a versão mais recente do ESR. Tenho uma solução alternativa por enquanto. Tenho muitos plugins escritos e, com essa solução alternativa, não vou arriscar um servidor de produção com alto tráfego para testar. Só terei que esperar até fazer a atualização mais tarde e ver se o problema foi corrigido.

Opa, talvez eu tenha mal interpretado a lista de lançamentos. Sim, acho que sua versão ainda é suportada.

Você tem um exemplo de e-mail assim que possamos usar para facilitar a reprodução (e, portanto, a correção)? Sinta-se à vontade para me enviar um arquivo .eml por mensagem privada (com os dados PII removidos).

Como usuário novo, não consigo fazer upload de um arquivo. E procurei em todos os lugares e não consigo ver onde posso enviar uma mensagem direta (DM) para você, então isso também pode estar desativado. Desculpe tornar isso difícil.

Aumentei seu nível de confiança, então você deve conseguir clicar no meu avatar e ver um botão Mensagem :wink:

Feito. Obrigado. Agradeço.