Entonces, si la prueba de openssl funciona pero la prueba de conexión ejecutada por discourse-doctor sigue fallando con esos ajustes, ¿qué sigue? Aunque la prueba de openssl funcione, mi conexión de Discourse sigue fallando con 504 5.7.4 Tipo de autenticación no reconocido… Supongo que no reconoce el método de autenticación LOGIN. Intenté agregar DISCOURSE_SMTP_AUTHENTICATION: login al archivo app.yml, pero eso no ha ayudado.
Por si sirve de algo, esto es lo que he encontrado. Entré en la imagen de Docker y empecé a experimentar con el script lib/tasks/emails.rake y el archivo config/discourse.conf. Varias horas después, tras probar todas las combinaciones posibles de smtp.office365.com y .mail.protection.outlook.com con AUTH login y AUTH plain, descomenté el bloque situado justo antes del inicio de SMTP.
# Nos gustaría hacer esto, pero Net::SMTP falla al usar starttls
#Net::SMTP.start(smtp[:address], smtp[:port]) do |s|
# s.starttls if !!smtp[:enable_starttls_auto] && s.capable_starttls?
# s.auth_login(smtp[:user_name], smtp[:password])
#end
Ejecutarlo tal cual provocó un tiempo de espera agotado en la lectura.
Al modificarlo de esta manera —llamando a new en lugar de start— se logró un envío exitoso.
Net::SMTP.new(smtp[:address], smtp[:port]) do |s|
s.enable_starttls
s.auth_login(smtp[:user_name], smtp[:password])
end
Esta es mi primera experiencia con Ruby, rake y sus compañeros. No puedo explicar por qué funciona ni si es algo ‘bueno’ para casos generales.
J.
Ah, también, nunca pude lograr que funcionara con my_domain.mail.protection.outlook.com en el puerto 25 ni en el 587; lo que sí funcionó fue smtp.office365.com:587.
Utilizo socketlabs.com como mi servicio de entrega de correo y tuve un problema similar. En mi caso, la solución fue editar lib/tasks/emails.rake de la siguiente manera:
Cambiar la línea: Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password])
por Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])
Sin este cambio, DISCOURSE_SMTP_AUTHENTICATION: login no se pasa al código SMTP de nivel inferior.
No he probado si el código modificado sigue funcionando con otros métodos de autenticación, pero soluciona el problema para la autenticación login.
Puedo confirmar que agregar smtp[:authentication]
a la llamada Net::SMTP.start y establecer DISCOURSE_SMTP_AUTHENTICATION: login
en app.yml soluciona el problema en la página de prueba de correo electrónico.
Creo que los correos electrónicos normales se envían mediante la librería mail, y establecer DISCOURSE_SMTP_AUTHENTICATION: login
en app.yml es suficiente para que la librería funcione correctamente.
Aun así, creo que lib/tasks/emails.rake debería ser parcheado para usar la configuración DISCOURSE_SMTP_AUTHENTICATION. Esto ahorraría depuración innecesaria.
Como actualización general sobre este tema, Microsoft está en proceso de eliminar la autenticación heredada para SMTP y POP3, lo que va a complicar las cosas si estás utilizando O365 como proveedor de correo. La política predeterminada aplicada ahora es prohibir SMTP AUTH y debes habilitarla por buzón. Espero que esto sea útil; ayer por la mañana estuve dando cabezazos contra esta pared.
Es una verdadera lástima, especialmente con POP, ya que configurar el correo entrante se volverá mucho más difícil a menos que Discourse añada soporte IMAP para buzones de correo entrante.
Hay una solución sencilla para el correo entrante que incluye un contenedor para recibirlo. Anteriormente se llamaba “straightforward”, pero alguien objetó el nombre y fue cambiado, y ya no puedo encontrarlo.
Bueno, en cualquier caso, ejecutar tu propio servidor de correo debería considerarse un último recurso. Creo que se llamaba “entrega directa”, intenta buscar eso.