Obrigado, lavamind - esse é um dado muito útil, especialmente por termos um tópico concreto de “arquivo do Mailman mostra 5, tópico do fórum mostra 3” para nos ancorarmos.
Dado que você está vendo isso várias vezes por semana (cerca de 5-10% das mensagens) e que, para este incidente, o motivo da rejeição é consistentemente a variante enganosa de “tópico fechado/excluído”, o próximo passo ideal é capturar uma mensagem de ponta a ponta para vermos o que o Discourse pensou que estava fazendo.
Para um dos 3 e-mails rejeitados associados àquele tópico espelhado, você poderia obter o seguinte:
-
Em /admin/email-logs/rejected, abra uma das linhas InvalidPost para aquele incidente e copie:
- o Message-ID
- a data/hora
- o Para / De / Assunto (redigidos) mostrados na linha
- o texto completo do motivo da rejeição (conforme exibido)
-
No console do Rails (no contêiner do aplicativo Discourse), extraia o e-mail bruto que o Discourse armazenou:
@supermathie, IncomingEmail ainda é o local canônico para buscar o bruto, e há mais alguma coisa que você gostaria além dele para depurar o InvalidPost?
mid = "<cole aqui o Message-ID do log de e-mail rejeitado>"
ie = IncomingEmail.find_by(message_id: mid)
puts ie&.raw
- Também extraia os atributos pareados do
EmailLog para o mesmo Message-ID (isso geralmente revela se o Discourse o tratou como uma resposta ou um novo tópico, e quais IDs de tópico/categoria ele resolveu):
mid = "<o mesmo Message-ID acima>"
log = EmailLog.where(message_id: mid).order(created_at: :desc).first
pp log&.attributes&.slice(
"id",
"email_type",
"to_address",
"from_address",
"subject",
"post_id",
"topic_id",
"user_id",
"status",
"bounce_error_code",
"bounce_key",
"created_at"
)
Por que este trio?
IncomingEmail.raw nos diz se o e-mail chegou malformado / codificado de forma estranha / apenas com rodapé, em oposição ao Discourse ter escolhido a parte MIME “errada”.
EmailLog nos diz o que o Discourse tentou (chave de resposta vs. roteamento de tópico, IDs de tópico/categoria resolvidos, etc.).
- A linha da interface do e-mail rejeitado confirma que estamos olhando para o mesmo incidente e preserva o que os operadores veem.
Se a privacidade for uma preocupação, sinta-se à vontade para redigir endereços e qualquer texto do corpo da mensagem dentro do bruto, mas, por favor, mantenha:
- Cabeçalhos MIME (Content-Type, limites, charset, Content-Transfer-Encoding)
- A estrutura multipart (para que possamos ver quais partes existem)
- O Message-ID e cabeçalhos de roteamento básicos (você pode redigir domínios, se necessário)
Assim que tivermos um Message-ID falho + IncomingEmail.raw + a fatia do EmailLog, poderemos dizer rapidamente se isso é:
- uma incompatibilidade de chave de resposta/roteamento de tópico,
- um caso extremo de permissões,
- ou uma falha na análise de e-mail / seleção de parte MIME / decodificação.