Tenemos un problema extraño con nuestro servidor Discourse. Durante varias semanas, la recepción de correos desde nuestro servidor POP3 interno funcionó sin ningún problema. El 16 de febrero, la recepción de correos dejó de funcionar de repente. Curiosamente, vemos actividad de Discourse en los archivos de registro de nuestro servidor POP3:
Feb 25 13:54:49 mailout popa3d[12458]: Authentication passed for discourse
Feb 25 13:54:49 mailout popa3d[12458]: 1545 messages (12060237 bytes) loaded
Feb 25 13:54:49 mailout popa3d[12458]: 0 (0) deleted, 1545 (12060237) left
Sin embargo, no se procesan nuevos correos.
Estamos utilizando la versión más reciente de Discourse 2.7.0.beta4 (desde hoy; antes era la 2.7.0.beta3). Estos son nuestros ajustes de correo:
Los correos electrónicos atrapados en el servidor de correo tienen todas fechas posteriores a que POP3 dejó de funcionar, es decir, después del 23 de febrero en mi caso.
Ve al servidor de correo, elimina todos los correos que haya allí. Obviamente, debe haber alguna forma de conservar los que quieras guardar…
Luego, espera a que Discourse realice la conexión POP3 de nuevo.
Esto ahora funciona para mí y los correos vuelven a aparecer.
Sospecho que algún contador interno de IDs de correo se ha corrompido durante la última actualización de la versión. @codinghorror Tal vez está configurado con un número muy grande, por lo que todos los correos se tratan como “ya leídos” o algo así…
Si no elimino todos los correos existentes, los nuevos simplemente se acumulan.
El cambio más reciente en el sondeo POP3 ocurrió en enero.
Eso por sí solo no debería impedir que Discourse realice el sondeo, pero es posible que un correo entrante genere una excepción. No hay manejo de errores en el nuevo código…
@jzedlitz ¿Sigues experimentando el problema y quieres ayudar a averiguar qué está ocurriendo? ¿Hay algún error relacionado en /logs? ¿Ves un error en /sidekiq/scheduler cuando buscas Jobs::PollMailbox? ¿Ves un error al realizar un sondeo manual en la consola de Rails?
./launcher enter app
rails c
Jobs::PollMailbox.new.execute({})
Sí, ese fue el PR que @gerhard vinculó en POP3 email polling stopped working - #6 by gerhard. No debería romper nada, creo que no. Necesitaría el mensaje de correo electrónico original completo para probarlo. Este es el cambio principal en el código:
def mail_too_old?(mail_string)
mail = Mail.new(mail_string)
date_header = mail.header['Date']
return false if date_header.blank?
date = Time.parse(date_header.to_s)
date < 1.week.ago
end
Así que supongo que podría haber un error silencioso si Time.parse falla. Ya que ni siquiera intentamos hacer algo si falta la cabecera Date.
Perdona por no responder antes. Hemos resuelto más o menos el problema vaciando la bandeja de entrada POP3 de Discourse. Inmediatamente, Discourse pudo volver a recibir mensajes. Transferí algunos de los correos electrónicos más recientes a la bandeja de entrada POP3, ahora vacía, y también pudieron ser procesados. Sin embargo, tan pronto como coloqué algunos de los 1.400 correos electrónicos más antiguos en la bandeja, Discourse dejó de procesar cualquier mensaje.
Acabo de toparme con el mismo problema. Noté que algo no funcionaba correctamente cuando los correos deberían haber creado mensajes. La bandeja de entrada POP3 tenía algunos correos (ejecuto una instancia pequeña).
Parece que agregar los mensajes uno por uno solucionó el problema; creo que ahora funciona mejor, pero debo esperar un poco para confirmarlo.
Desafortunadamente, el problema ha vuelto a ocurrir. Usando formail, he dividido el mbox en mensajes individuales y los he introducido uno por uno en la cuenta POP3. Algunos mensajes (incluso los más antiguos) fueron procesados por Discourse, mientras que otros no.
¿Existe alguna forma de generar más mensajes de registro desde Jobs::PollMailbox.new.execute({}) para ver por qué se ignora un mensaje?
¿Qué archivo de registro exactamente? Intenté tail -f /var/discourse/shared/standalone/log/rails/*.log, pero no aparecen mensajes mientras Discourse intenta recuperar los correos.
Gracias por la explicación. Lamentablemente, /logs/ permanece vacío mientras se recuperan los correos electrónicos. ¿Existe alguna forma de aumentar el nivel de registro?
¿Podrías aplicar los siguientes cambios a app/jobs/scheduled/poll_mailbox.rb dentro del contenedor de Docker antes de ejecutar Jobs::PollMailbox.new.execute({}) en la consola de Rails?
pop3.start(SiteSetting.pop3_polling_username, SiteSetting.pop3_polling_password) do |pop|
+ mail_string = nil
pop.each_mail do |p|
+ mail_string = nil
mail_string = p.pop
break if mail_too_old?(mail_string)
process_popmail(mail_string)
p.delete if SiteSetting.pop3_polling_delete_from_server?
+ rescue => e
+ puts e.message
+ puts e.backtrace.join("\n\t")
+ puts "", "MESSAGE:", mail_string if mail_string
end
end
Ahora que sé en qué archivo buscar, pude hacer algunas pruebas por mi cuenta. El problema era la verificación mail_too_old. Después de eliminarla, los mensajes atascados se procesaron.
Sí, lo sospechaba, pero sería interesante saber qué correo impidió que mail_too_old? funcionara. ¿Era realmente demasiado antiguo? ¿Falló al analizar el correo? ¿O fue algo más? Si quieres, puedes enviarme por mensaje privado el correo que estaba impidiendo que POP3 funcionara.