1.3K
Al enviar correos electrónicos desde varias aplicaciones o scripts, es posible que encuentre un error 5.7.3 Se requiere StartTLS para enviar correo electrónico. Puede enfrentar este error en diferentes aplicaciones (SQL Server, Jenkins), scripts y lenguajes de programación (Visual Basic, PowerShell, Python, Java, C#). En este artículo, veremos cómo corregir el error requerido de STARTTLS al enviar un correo electrónico.
En nuestro caso, vimos un error “450 4.4.317 No se puede conectar al servidor remoto. 5.7.3 Se requiere STARTTLS para enviar correo” en el registro de seguimiento de Exchange Online (Microsoft 365):
¿Qué significa el error StartTLS is Required?
InicioTLS es una extensión del protocolo SMTP que permite decirle al servidor de correo electrónico que el cliente de correo electrónico desea utilizar una conexión segura mediante TLS o SSL. Al usar STARTTLS, se crea una conexión cifrada justo encima de una conexión TCP habitual en lugar de abrir un puerto separado para conexiones cifradas. El comando StartTLS es usado tanto por SMTP como por IMAP (POP3 usa un comando STLS diferente para el cifrado).
Para verificar que su servidor de correo electrónico admita StartTLS, abra un símbolo del sistema y conéctese mediante telnet:
telnet smtp.gmail.com 25
En este ejemplo, el cliente ha solicitado (EHLO) una lista de funciones que admite el servidor de correo electrónico y el servidor ha devuelto que puede usar STARTTLS: 250-STARTTLS.
Si obtiene un error StartTLS is Required, verifique:
- Que su servidor SMTP admita la función STARTTLS. La mayoría de los servidores SMTP implementan STARTTLS solo en el puerto 587. Algunos servidores (como Gmail) también permiten usar STARTTLS en el puerto SMTP predeterminado 53.
- Verifique que el servidor receptor esté configurado para usar TLS. Compruebe la versión de TLS. La mayoría de los servidores de correo electrónico actualmente solo aceptan TLS 1.2;
- Compruebe si su cliente de correo electrónico es compatible con StartTLS. De lo contrario, debe pedirle al administrador del servidor de correo electrónico que lo configure para aceptar sus mensajes sin usar STARTTLS (de manera predeterminada, TLS/StartTLS está habilitado en Microsoft 365/Office 365). Puede deshabilitar SMTP Auth (y StartTLS) para buzones de correo específicos en Microsoft 365 con PowerShell:
Set-CASMailbox -Identity [email protected] -SmtpClientAuthenticationDisabled $false
Error de StartTLS en PowerShell
Es posible que encuentre un error de StartTLS al intentar enviar un correo electrónico mediante PowerShell:
Send-Mailmessage -smtpServer smtp.theitbros.com -Port 587 -from "[email protected]" -to "[email protected]" -subject "Alert" -body "Test TLS"
Este comando falla con un error:
Enviar mensaje de correo: el servidor SMTP requiere una conexión segura o el cliente no se autenticó. La respuesta del servidor fue: 5.7.0 Debe emitir un comando STARTTLS primero
Si agrega la opción -UseSsl al comando de PowerShell, el texto de error cambia:
Enviar mensaje de correo: no se pueden leer los datos de la conexión de transporte: el host remoto cerró a la fuerza una conexión existente.
El problema es que algunos servidores SMTP solo aceptan TLS 1.2 para negociar STARTTLS. Para usar TLS 1.2 para las conexiones al servidor de correo electrónico desde la consola de PowerShell, ejecute el siguiente comando antes de ejecutar el cmdlet Send-MailMessage:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Para obligar a PowerShell y otras aplicaciones de .Net Framework a usar siempre TLS 1.2 para las conexiones HTTPS, agregue los siguientes valores al registro:
Set-ItemProperty -Path 'HKLM:SOFTWAREWow6432NodeMicrosoft.NetFrameworkv4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord Set-ItemProperty -Path 'HKLM:SOFTWAREMicrosoft.NetFrameworkv4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord