Fallo en la prueba de correo en discourse-doctor

Estoy intentando solucionar problemas de SMTP usando ./discourse-doctor

El problema relacionado más cercano que pude encontrar es Yet other SMTP 587 port email various errors.
Antes de implementar las sugerencias, obtuve un tiempo de espera constante.

Después de configurar:

DISCOURSE_SMTP_FORCE_TLS: true
DISCOURSE_SMTP_ENABLE_START_TLS: false

Obtengo lo siguiente de discourse-doctor:

==================== PRUEBA DE CORREO ====================
Para una prueba robusta, obtenga una dirección de http://www.mail-tester.com/
O simplemente envíese un mensaje de prueba a sí mismo.
¿Dirección de correo para la prueba? ('n' para omitir) [admin@burlyqna.org]:
Enviando correo a admin@burlyqna.org. . .
Probando el envío a admin@burlyqna.org usando smtp.mailfence.com:465, nombre de usuario:philion@mailfence.com con autenticación simple.
Conexión al servidor SMTP exitosa.
Enviando a admin@burlyqna.org. . .
Envío de correo fallido.
fin del archivo alcanzado

Ver: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt

Puedo validar externamente la configuración del servidor SMTP con:

swaks --to philion@gmail.com --from admin@burlyqna.org --server smtp.mailfence.com:465 --auth LOGIN --tlsc --auth-user philion@mailfence.com

¿Alguna idea de cómo Conexión al servidor SMTP exitosa. pero Envío de correo fallido.?

Muchas gracias,
Paul

1 me gusta

¿Para TLS deberías usar el puerto 587?

Intentaría añadir puts error.backtrace (o similar) después de

y volver a ejecutar discourse-doctor.

1 me gusta

Esto es lo que nuestro respondedor automático generó, creo que intentar con el dominio smtp es probablemente un intento que vale la pena.

1 me gusta

Thomas,

Hay mucha discusión sobre el puerto 465 en los foros de soporte. Según mi lectura, parece que Discourse hace muchas suposiciones sobre SSL y TLS sobre SMTP, y hay un puñado de variables de entorno que controlan los comportamientos detallados.

SIN EMBARGO, dada la cantidad de errores reportados y preguntas relacionadas en estos foros, tengo la fuerte impresión de que estas configuraciones están mal documentadas y son difíciles de usar. Y al ver problemas similares que se remontan a 2017, este ha sido un problema durante años.

Las búsquedas de “puerto 465” o “Net::ReadTimeout smtp” pueden revelar una larga lista de problemas similares.

¡Voy a intentarlo. Gracias!

Thomas,

Estoy intentando encontrar este archivo en la compilación de docker y no puedo. Veo que está dentro de un contenedor, pero he clonado discourse/discourse_docker y no discourse/discourse.

Cuando intento entrar en la aplicación con launcher enter app, no hay forma de editar ese archivo ni de instalar vi.

No encuentro ninguna documentación ni indicadores para ejecutar ./discourse-doctor con los registros de depuración activados.

Falla de la misma manera: No se puede enviar correo electrónico, ./discourse-doctor informa el mismo error.

Actualicé app.yml como se sugirió, reconstruí la aplicación (sin correo electrónico), probé ./discourse-doctor y obtuve el mismo mensaje de error.

./launcher enter  app
sudo apt update && sudo apt install neovim -y

debería ayudar.

¡Gracias! Me estoy haciendo mayor cuando no puedo “sudo apt install vi”. Tengo que recordar que ahora se llama neovim.

Dada la sugerencia de volcar el rastreo de pila, ofrezco: http://talk.burlyqna.org/ODgyZjg5Y2QyMTU1ZmEx.txt

El fragmento relevante:

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'
/usr/local/lib/ruby/3.3.0/delegate.rb:87:in `method_missing'
/var/www/discourse/lib/email/sender.rb:296:in `send'

Parece que el otro lado terminó la conexión.

por cierto: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt ya no está disponible

1 me gusta

¿Esos archivos de registro se conservan cuando reconstruyo?

Actualicé las contraseñas para eliminar símbolos, esperé el retraso de propagación de la autenticación SMTP (suficiente para preparar el almuerzo), confirmé las credenciales adecuadas para enviar correos electrónicos correctamente con swaks, y…

Mismo error.

Noto que reconstruir elimina el volcado de la pila de llamadas, así que voy a agregarlo de nuevo e intentar ./launcher destroy app && ./launcher start app

1 me gusta

Instalado rastreo de depuración, ejecutado doctor:
http://talk.burlyqna.org/NWQ5MjBlMTIwN2JiNGNl.txt

==================== PRUEBA DE CORREO ====================
Para una prueba robusta, obtenga una dirección de http://www.mail-tester.com/
O simplemente envíese un mensaje de prueba a usted mismo.
¿Dirección de correo electrónico para la prueba de correo? ('n' para omitir) [admin@burlyqna.org]:
Enviando correo a admin@burlyqna.org. . .
Probando el envío a admin@burlyqna.org usando smtp.mailfence.com:465, nombre de usuario: philion con autenticación simple.
Conexión al servidor SMTP exitosa.
Enviando a admin@burlyqna.org. . .
Error al enviar el correo.
fin de archivo alcanzado
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'

¿Intentaste usar tu correo electrónico completo como nombre de usuario?

Actualizado app.yml para usar el correo electrónico completo como usuario, redesplegado con ./launcher destroy app && ./launcher start app.

Mismo error: http://talk.burlyqna.org/ZDg1YWE1YTA2YWU1Zjhj.txt

Destruir e iniciar también eliminó la depuración, pero voy a asumir el mismo problema:

case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)

devuelve un nulo, y eso resulta en una respuesta EOF y no/error.

Después de muchas pruebas y con la ayuda de @thoka, ofrezco el siguiente resumen:

Soy capaz de ejecutar pruebas SMTP utilizando las mismas credenciales que he proporcionado a container/app.yml que funcionan tanto con swaks (Swaks - Swiss Army Knife for SMTP) como con el código de ejemplo de Ruby proporcionado por @thoka (ver abajo).

Estos funcionan de manera consistente. Sin embargo, intentar configurar un servidor Discourse (que no puede enviar el correo electrónico inicial al usuario administrador) o usar el bot discourse-doctor resulta en fallos de correo electrónico:

==================== PRUEBA DE CORREO ====================
Para una prueba robusta, obtén una dirección de http://www.mail-tester.com/
O simplemente envíate un mensaje de prueba.
¿Dirección de correo para la prueba de correo? ('n' para omitir) [admin@burlyqna.org]:
Enviando correo a admin@burlyqna.org. . .
Probando el envío a admin@burlyqna.org usando smtp.mailfence.com:465, nombre de usuario:xxx@mailfence.com con autenticación simple.
Conexión al servidor SMTP exitosa.
Enviando a admin@burlyqna.org. . .
Fallo al enviar el correo.
fin del archivo alcanzado

Esto parece ser un fallo de configuración del protocolo, ya que puedo enviar correos electrónicos de prueba utilizando herramientas estándar de Ruby:

require 'mail'

SMTP_SERVER = 'smtp.mailfence.com'
SMTP_PORT = 465
USERNAME = 'xyz'
PASSWORD = '...'

FROM = 'admin@burlyqna.org'
TO = 'testing@gmail.com'
SUBJECT = 'Prueba desde Ruby'

BODY = "Hola,\n\nEste es un correo electrónico de prueba enviado desde Ruby a través de una conexión segura SSL.\n\nSaludos cordiales!"

Mail.defaults do
  delivery_method :smtp, {
    address: SMTP_SERVER,
    port: SMTP_PORT,
    user_name: USERNAME,
    password: PASSWORD,
    domain: "burlyqna.org",
    enable_starttls_auto: :false,
    authentication: :plain,
    ssl: true,
  }
end

begin
  puts 'Enviando correo...'
  puts "SMTP_SERVER: #{SMTP_SERVER}"
  puts "SMTP_PORT: #{SMTP_PORT}"
  puts "USERNAME: #{USERNAME}"
  puts "PASSWORD: #{PASSWORD}"
  puts "FROM: #{FROM}"
  puts "TO: #{TO}"

  mail = Mail.new do
    to TO
    from FROM
    subject SUBJECT
    body BODY
  end

  mail.deliver!
end

La configuración SMTP actual en mi app.yml es:

DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: xxx@mailfence.com
DISCOURSE_SMTP_PASSWORD: '...'
DISCOURSE_SMTP_FORCE_TLS: true                   # https://meta.discourse.org/t/cannot-send-email-problem-with-port-465/246004/8
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (opcional, por defecto true)
DISCOURSE_SMTP_DOMAIN: burlyqna.org              # (requerido por algunos proveedores)
DISCOURSE_NOTIFICATION_EMAIL: noreply@talk.burlyqna.org
1 me gusta

Seguimiento final: ¡el correo electrónico funciona!

Los problemas que tuve en el camino:

  • DISCOURSE_SMTP_PASSWORD tenía símbolos pero no estaba entre comillas
  • DISCOURSE_SMTP_FORCE_TLS: true para que SSL funcionara
  • DISCOURSE_SMTP_ENABLE_START_TLS: false para detener el handshake TLS
  • DISCOURSE_NOTIFICATION_EMAIL configurado en una dirección de correo electrónico inexistente
DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: example@mailfence.com
DISCOURSE_SMTP_PASSWORD: 'passwd'
DISCOURSE_SMTP_FORCE_TLS: true                  
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_NOTIFICATION_EMAIL: admin@example.org
1 me gusta

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