'Responder por correo electrónico' ya no funciona después de la migración

Hola,

Acabamos de migrar nuestra instancia de Discourse autoalojada de un servidor a otro. Todos los ajustes se migraron del sistema antiguo al nuevo, incluyendo «responder por correo electrónico» y «permitir nuevos mensajes a través del correo electrónico». Estamos utilizando la configuración de discourse/mail-receiver para gestionar la parte del correo.

Tanto la funcionalidad de «responder a» como la de «nuevo correo» funcionaron perfectamente en el sistema antiguo, pero tenemos un problema en el nuevo servidor: «responder a» ya no funciona.

  1. Como usuario desconocido, cuando envío un correo electrónico a la dirección configurada para este fin, veo que el mensaje llega. Se crea un nuevo usuario en fase de preparación. ¡El mensaje se publica! Genial.
  2. Como usuario del equipo, puedo responder a este mensaje y se entrega correctamente. ¡Excelente!
  3. PERO, al volver a responder a ese correo, lo que debería generar una respuesta en Discourse, falla. Cuando el mensaje llega a mail-receiver, intenta entregarlo a través de la API, pero falla con los siguientes errores en el registro:

(Por razones de privacidad, he modificado los nombres de usuario y dominio)

<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 mencioné, todo este intercambio funcionó perfectamente en la configuración antigua. La nueva configuración es exactamente la misma (local_discourse/app y local_discourse/mail-receiver) que la antigua.

  • ¿Podría alguien decirme por qué la API handle_mail devuelve un error 400 al recibir un correo de respuesta?
  • ¿Sería posible hacer que el registro sea más detallado para poder investigar más a fondo?

Deberías poder encontrar más información en Administración - Correos electrónicos - Rechazados.

No, lo siento, ni siquiera aparece como rechazado. Supongo que es porque se topa con un error 400 Bad Request.

Me pregunto cuál es la diferencia entre el ‘correo nuevo’ y el ‘correo de respuesta’. Diría que la única diferencia relevante es el destinatario. Pero ambos pasan por el mismo manejador (mail-receiver) y se publican en la misma API: https://forum.acme.org/admin/email/handle_mail

¿También migraste eso? ¿Actualizaste los registros MX en consecuencia?

¿Cambias el nombre de host de tu foro?

  • El receptor de correo también ha sido migrado.
  • Los nombres de host son los mismos.

El problema no está en la parte de MX. El correo llega al receptor de correo, como muestran los registros, pero tan pronto como se envía al API, recibe un error 400 (lo que significa una solicitud incorrecta).

Sin embargo, hay una diferencia en la configuración: he colocado un proxy inverso (nginx) delante para obtener la funcionalidad de “fuera de línea temporal” y, posiblemente, alojar otros sitios web en el mismo servidor. Aún no entiendo por qué sería un problema, ya que se está aceptando un nuevo tema sin ningún contratiempo. Aun así, voy a ver qué sucede si saco el proxy inverso de la ecuación…

Actualización
¡Qué lástima! Movi la instalación de Discourse detrás del proxy inverso de nginx (básicamente reconstruyendo app con la configuración correcta y apagando nginx), ¡pero esto no solucionó el problema en absoluto!
Ahora, realmente no tengo idea. ¿Qué está pasando aquí?

Para resumir:

  • Nuestra instalación anterior de Discourse (app y mail-receiver) podía aceptar nuevos temas y respuestas.
  • Después de migrar a un nuevo servidor (todo exactamente igual), los nuevos temas siguen siendo aceptados, pero las respuestas están siendo rechazadas con un error 400 Bad Request.

He encontrado el problema que está causando esta situación.
Al probar con varios clientes de correo, descubrí que los correos enviados con mi cliente de escritorio (Thunderbird) generaban el error ‘400 Bad Request’, mientras que al usar el cliente web, la respuesta se enviaba correctamente.
Tras investigar más a fondo, descubrí que Thunderbird de alguna manera cambiaba a codificación Western (Windows-1252) al responder, mientras que el cliente web se mantenía en UTF-8. Tras forzar a Thunderbird a usar UTF-8, el correo también se envió correctamente.

Thunderbird, el correo no se envió

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

Correo web

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

Thunderbird, el correo se envió

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

Diría que el receptor del correo debería realizar una verificación y limpieza de la codificación, pero como no soy desarrollador de Ruby, dejo esa parte del código en manos de los desarrolladores :smiley:

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