Te voy a contar una historia que es un clásico en el mundo tech hondureño: el código está perfecto (según vos), pero todo falla. Esta vez, el enemigo no era un bug en el código, sino el antivirus metido y los espacios en blanco invisibles. Aquí va el paso a paso para que, si te pasa, no te friegues tanto como yo.
1. El problema inicial: Error con el certificado
Todo comenzó con este error:
«The remote certificate is invalid according to the validation procedure.»
Cuando vi ese mensaje, me sentí como cuando estás en una pulpería y te dicen: «No hay fiao». Lo primero que vino a mi mente fue que algo andaba mal con el certificado SSL/TLS del servidor SMTP.
¿Qué hicimos?
Instalamos OpenSSL para analizar la conexión. Si no lo tenés instalado, buscá la versión para Windows y agregála al PATH. Desde la terminal, ejecutá:
openssl s_client -connect mail.zelvait.com:465
El resultado fue claro como el agua:
«self-signed certificate in certificate chain»
El certificado estaba siendo interceptado por el Avast. Este bicho, en su afán de proteger, estaba metiendo un certificado autofirmado que no era reconocido por mi aplicación.
Solución:
-
- Abrí el Avast y desactivá el escaneo de correos y conexiones HTTPS. Esto dejó que mi aplicación se conectara directamente al certificado original del servidor.
-
- Protip: Si usás otro antivirus, buscá configuraciones similares. La mayoría tienen alguna opción para dejar de interferir con SSL/TLS.
2. El error siguiente: Incorrect authentication data
Cuando ya pensaba que había vencido, salta otro error:
«Incorrect authentication data.»
¡Ah, puchica! Esto ya era demasiado. Revisé las credenciales una y otra vez: el usuario estaba correcto, la contraseña también. Pero luego me di cuenta de un detalle casi invisible: había espacios en blanco extra al final de los parámetros.
¿Cómo lo detecté?
Agregué mensajes de depuración para ver los valores que estaba enviando:
-
- msg(«Host: » + &InsMailHost + » UserName: » + &InsMailSrvAdd)
- Noté que algunos valores tenían espacios extras, como:
- «Host»: «mail.zelvait.com «,
- «UserName»: «carlos.zelaya@zelvait.com «
Solución:
-
- Usé una función trim() para limpiar todos los valores antes de enviarlos al servidor SMTP:
-
- &InsMailHost = &InsMailHost.Trim()
-
- &InsMailSrvAdd = &InsMailSrvAdd.Trim()
-
- Con esto, el servidor aceptó las credenciales sin problemas.
3. Lecciones aprendidas (y consejos para vos)
Si estás configurando un servidor SMTP en tu aplicación, aquí van las cosas que aprendí:
Sobre los antivirus
-
- Revisá si tu antivirus está interceptando la conexión SSL/TLS.
-
- Desactivá el escaneo de correos o conexiones HTTPS si está causando problemas.
Sobre los parámetros
-
- Siempre depurá los valores antes de enviarlos al servidor. Los espacios invisibles son como los zancudos: pequeños, pero joden un montón.
-
- Usá trim() o alguna función similar para limpiar cadenas de texto.
Sobre OpenSSL
-
- Usá OpenSSL para inspeccionar los certificados. Te dirá si hay problemas con la cadena de confianza o con el nombre del servidor.
4. Código limpio para evitar problemas
Aquí te dejo un fragmento de código que te puede servir como referencia:
&Mail.Host = &InsMailHost.Trim()
&Mail.Port = &InsMailPort
&Mail.UserName = &InsMailSrvAdd.Trim()
&Mail.Password = &InsMailSrvPass.Trim()
&Mail.Secure = 1 // SSL/TLS
&Mail.Authentication = 1 // Login estándar
&Error = &Mail.Login()
If &Error <> 0
msg("Error al conectar: " + &Mail.ErrDescription)
Return
EndIf
Conclusión
Al final, resolver este problema fue como armar un buen plato de baleadas: paciencia, ingredientes correctos (en este caso, configuraciones) y evitar que algo se te queme o te ponga la llave, como el antivirus.
Espero que esta guía te sirva si te topás con algo parecido. ¡Salud y buenos códigos, Baleada Lovers!
Average Rating