es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enviar correo electrónico con CDO pierde conexión o requiere 5.7.3 STARTTLS.

Tengo código de Excel VBA que utiliza CDO para enviar un correo electrónico utilizando smtp.office365.com. Esto ha funcionado durante los últimos 5 años pero de repente dejó de funcionar en octubre de 2021.

El manejo de errores devuelve lo siguiente:
1. La conexión de transporte se perdió con el servidor.
2. Se requiere STARTTLS 5.7.3 para enviar el correo electrónico.

Curiosamente, cuando la hoja de Excel se utiliza en cualquier otra estación de trabajo, el código sigue funcionando como se esperaba. Desde entonces, he reinstalado Office y Windows pensando que debe ser un problema relacionado con la PC. Sin embargo, el problema persiste.

Puedo enviar un correo electrónico utilizando PowerShell en la misma estación de trabajo utilizando el mismo servidor, puertos y credenciales.

Código:

Const cdoSendUsingPort = 2  ' Enviar el mensaje utilizando SMTP
Const cdoBasicAuth = 1      ' Autenticación de texto claro
Const cdoTimeout = 60       ' Tiempo de espera para SMTP en segundos

Const mailServer = "smtp.office365.com"
Const SMTPport = 25
Const mailusername = 
Const mailpassword = 

Set objEmail = CreateObject("CDO.Message")
Set objConf = objEmail.Configuration
Set objFlds = objConf.Fields

With objFlds
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername
    .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword
    .Update
End With

No estoy seguro de cómo diagnosticar esto aún más. Originalmente pensé que podría estar relacionado con puertos bloqueados o algún tipo de corrupción. He formateado la PC y reinstalado Windows y Office.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como el problema sólo ocurre en una estación de trabajo en particular, podría valer la pena verificar cualquier configuración de firewall o antivirus que pudiera estar bloqueando la comunicación con el servidor SMTP. Además, verificar si se han realizado actualizaciones o cambios recientes en la estación de trabajo podría ayudar a identificar posibles conflictos con el código.

    Otro paso para solucionar el problema podría ser probar a utilizar un cliente o biblioteca de correo electrónico diferente, como Outlook o el Modelo de Objetos de Outlook, para enviar correos desde Excel VBA. Esto podría ayudar a determinar si el problema es específico de la biblioteca CDO o si es un problema más general de la estación de trabajo.

    Alternativamente, podría valer la pena contactar con el soporte de Microsoft o el soporte de Office 365 para obtener ayuda en la solución del problema. Ellos podrían tener información adicional o recursos disponibles para ayudar a resolver el problema.

Comments are closed.