'Responder por e-mail' não funciona mais após a migração

Olá,

Acabamos de migrar nossa instância do Discourse auto-hospedada de um servidor para outro. Todas as configurações foram transferidas do sistema antigo para o novo, incluindo ‘responder por e-mail’ e ‘permitir novas postagens por e-mail’. Estamos usando a configuração discourse/mail-receiver para lidar com a parte de e-mail.
Tanto a funcionalidade de responder quanto a de novo e-mail funcionaram perfeitamente no sistema antigo, mas temos um problema no novo servidor: a opção de responder não funciona mais.

  1. Como um usuário desconhecido, quando envio um e-mail para o endereço configurado para esse fim, consigo ver a mensagem chegando. Um novo usuário em estágio é criado. A mensagem é postada. Ótimo!
  2. Como usuário da Equipe, posso responder a essa mensagem, e ela é entregue corretamente. Perfeito!
  3. MAS ao tentar responder novamente a esse e-mail, o que deveria resultar em uma resposta no Discourse, falha. Quando a mensagem chega no mail-receiver, ele tenta entregá-la por meio da API, mas isso falha com os seguintes erros no log.

(Por motivos de privacidade, alterei os nomes de usuário e domínio)

<22>Sep 13 09:45:15 postfix/qmgr[81]: AF8665CA560: from=<test-user@outside-org.nl>, size=9233, nrcpt=1 (queue active)
<23>Sep 13 09:45:15 receive-mail[144]: Recipient: 6ffb2772c3b09bf60fc2705753fb32ce@forum.acme.org
<19>Sep 13 09:45:15 receive-mail[144]: Failed to POST the e-mail to https://forum.acme.org/admin/email/handle_mail: 400
<22>Sep 13 09:45:15 postfix/pipe[143]: AF8665CA560: to=<6ffb2772c3b09bf60fc2705753fb32ce@forum.acme.org>, relay=discourse, delay=1126, delays=1126/0.01/0/0.21, dsn=4.3.0, status=deferred (temporary failure)

Como disse, todo esse processo de ida e volta funcionou perfeitamente no antigo. O novo setup é exatamente o mesmo (local_discourse/app e local_discourse/mail-receiver) do antigo.

  • Alguém poderia me dizer por que a API handle_mail estaria retornando um erro 400 para um e-mail de resposta?
  • Seria possível tornar o log mais detalhado, para que eu possa investigar mais a fundo?

Você deve ser capaz de encontrar mais informações em Admin - E-mails - Rejeitados.

Não, desculpe, nem aparece como Rejeitado. Acho que é porque esbarra em um 400 Bad Request…

Estou me perguntando qual é a diferença entre o ‘novo e-mail’ e o ‘e-mail de resposta’. Eu diria que a única diferença relevante é o destinatário. Mas ambos passam pelo mesmo manipulador (mail-receiver) e são enviados para a mesma API: https://forum.acme.org/admin/email/handle_mail

Você migrou isso também? Atualizou os registros MX de acordo?

Você alterou o hostname do seu fórum?

  • O receptor de e-mail também foi migrado.
  • Os nomes de host são os mesmos.

O problema não está na parte MX. O e-mail chega ao receptor de e-mail, conforme mostram os logs, mas assim que ele envia o e-mail para a API, recebe um erro 400 (o que significa uma solicitação inválida).

Há, no entanto, uma diferença na configuração: coloquei um proxy reverso (nginx) na frente dele para obter a funcionalidade de ‘temporariamente offline’ e, possivelmente, hospedar outros sites no mesmo servidor. Ainda não entendo por que isso seria um problema, já que um novo tópico está sendo aceito sem qualquer dificuldade. Ainda assim, vou ver o que acontece se eu remover o proxy reverso da equação…

Atualização
Que pena! Movi a instalação do Discourse de trás do proxy reverso nginx (basicamente recriando app com as configurações corretas e desligando o nginx), mas isso não resolveu o problema de forma alguma!
Agora, estou realmente sem ideias. O que está acontecendo aqui?

Para resumir:

  • Nossa instalação anterior do Discourse (app e mail-receiver) conseguia aceitar novos tópicos e respostas
  • Após migrar para um novo servidor (tudo exatamente igual), novos tópicos ainda são aceitos, mas as respostas estão sendo rejeitadas com um erro 400 Bad Request.

Encontrei o problema que está causando essa situação.

Ao testar vários clientes de e-mail, descobri que o e-mail enviado pelo meu cliente de desktop (Thunderbird) resultava em ‘400 Bad Request’, mas ao usar o cliente web, a resposta era enviada com sucesso.

Após uma investigação mais aprofundada, constatei que o Thunderbird, de alguma forma, alternava para a codificação Western (Windows-1252) ao responder, enquanto o cliente web mantinha o UTF-8. Ao forçar o Thunderbird a usar UTF-8, o e-mail também foi entregue com sucesso.

Thunderbird, o e-mail não passou

Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit

Webmail

Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit

Thunderbird, o e-mail passou

Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Acho que o receptor de e-mails precisa realizar alguma verificação e limpeza de codificação, mas como não sou desenvolvedor Ruby, vou passar essa parte do código para os desenvolvedores :smiley:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.