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.
==================== 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
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.
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é 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
==================== 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!'
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