una transporte tiempo smtpexception servidor segura requiere remoto puede posible operación nombre net mail forzado excedió espera escribir error enviar datos correo conexión conectar con cliente cerró autenticó c# smtp

c# - transporte - se excedió el tiempo de espera de la operación smtp gmail



SmtpException: no se pueden leer los datos de la conexión de transporte: net_io_connectionclosed (9)

¿Su biblioteca SMTP admite conexión cifrada? El servidor de correo puede esperar una conexión TLS segura y, por lo tanto, cerrar la conexión en ausencia de un saludo de TLS

Estoy usando la biblioteca SmtpClient para enviar correos electrónicos usando lo siguiente:

SmtpClient client = new SmtpClient(); client.Host = "hostname"; client.Port = 465; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.EnableSsl = true; client.Credentials = new NetworkCredential("User", "Pass); client.Send("from@hostname", "to@hostname", "Subject", "Body");

El código funciona bien en mi entorno de prueba, pero cuando uso servidores SMTP de producción, el código falla con una SmtpException "Fallo al enviar correo". con una IOException interna "Imposible leer datos de la conexión de transporte: net_io_connectionclosed".

Confirmé que los firewalls no son un problema. El puerto se abre bien entre el cliente y el servidor. No estoy seguro de qué más podría arrojar este error.


Cambia el puerto de 465 a 587 y funcionará.


En caso de que todas las soluciones anteriores no funcionen para usted, intente actualizar el siguiente archivo a su servidor (es decir, publicar, y una compilación anterior sería útil).

bin-> projectname.dll

Después de actualizar, verá este error. como lo he resuelto con esta solución.


Pruebe esto: aquí está el código que estoy usando para enviar correos electrónicos a múltiples usuarios.

public string gmail_send() { using (MailMessage mailMessage = new MailMessage(new MailAddress(toemail), new MailAddress(toemail))) { mailMessage.Body = body; mailMessage.Subject = subject; try { SmtpClient SmtpServer = new SmtpClient(); SmtpServer.Credentials = new System.Net.NetworkCredential(email, password); SmtpServer.Port = 587; SmtpServer.Host = "smtp.gmail.com"; SmtpServer.EnableSsl = true; mail = new MailMessage(); String[] addr = toemail.Split('',''); // toemail is a string which contains many email address separated by comma mail.From = new MailAddress(email); Byte i; for (i = 0; i < addr.Length; i++) mail.To.Add(addr[i]); mail.Subject = subject; mail.Body = body; mail.IsBodyHtml = true; mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; // mail.ReplyTo = new MailAddress(toemail); mail.ReplyToList.Add(toemail); SmtpServer.Send(mail); return "Mail Sent"; } catch (Exception ex) { string exp = ex.ToString(); return "Mail Not Sent ... and ther error is " + exp; } } }


Si está utilizando un servidor SMTP en el mismo cuadro y su SMTP está vinculado a una dirección IP en lugar de "Cualquier Asignado", puede fallar porque está tratando de usar una dirección IP (como 127.0.0.1) que SMTP no está funcionando actualmente. en.


También puede tener que cambiar la configuración de "aplicaciones menos seguras" en su cuenta de Gmail. EnableSsl, use el puerto 587 y active "aplicaciones menos seguras". Si busca en google la parte menos segura de las aplicaciones, hay páginas de ayuda de Google que lo vincularán directamente a la página de su cuenta. Ese fue mi problema, pero ahora todo está funcionando gracias a todas las respuestas anteriores.


Para cualquiera que tropiece con esta publicación en busca de una solución y haya configurado SMTP sendgrid a través de Azure.

El nombre de usuario no es el nombre de usuario que configuró cuando creó el objeto sendgrid en azul. Para encontrar su nombre de usuario;

  • Haga clic en su objeto sendgrid en azul y haga clic en administrar. Serás redirigido al sitio SendGrid.
  • Confirme su correo electrónico y luego copie el nombre de usuario que se muestra allí. Es un nombre de usuario generado automáticamente.
  • Agregue el nombre de usuario de SendGrid a su configuración SMTP en el archivo web.config.

¡Espero que esto ayude!


EDITAR: Versión Super Redux

Pruebe el puerto 587 en lugar de 465. El puerto 465 está técnicamente obsoleto.

Después de un montón de paquetes olfateando, lo descubrí. Primero, aquí está la respuesta corta:

.NET SmtpClient solo es compatible con el cifrado a través de STARTTLS. Si se establece el indicador EnableSsl , el servidor debe responder a EHLO con un STARTTLS, de lo contrario lanzará una excepción. Consulte la documentación de MSDN para más detalles.

En segundo lugar, una lección rápida de historia de SMTP para quienes tropiecen con este problema en el futuro:

Antes, cuando los servicios también querían ofrecer encriptación, se les asignaba un número de puerto diferente, y en ese número de puerto iniciaban inmediatamente una conexión SSL. A medida que pasaba el tiempo, se dieron cuenta de que era una tontería desperdiciar dos números de puerto para un servicio y diseñaron una forma para que los servicios permitieran texto sin formato y encriptación en el mismo puerto usando STARTTLS. La comunicación comenzaría a usar texto sin formato, luego usaría el comando STARTTLS para actualizar a una conexión encriptada. STARTTLS se convirtió en el estándar para el cifrado SMTP. Desafortunadamente, como siempre ocurre cuando se implementa un nuevo estándar, existe una mezcolanza de compatibilidad con todos los clientes y servidores que existen.

En mi caso, mi usuario estaba tratando de conectar el software a un servidor que estaba forzando una conexión SSL inmediata, que es el método heredado que no es compatible con Microsoft en .NET.


//Try this out... Port 465 is not there anymore for use string emailFrom = "sender email here"; string recieverEmail ="reciever email here"; string subject = "subject here"; string body = "message here"; MailMessage maile = new MailMessage(emailFrom, recieverEmail, subject,body); SmtpClient client = new SmtpClient("smtp.gmail.com", 587); client.Credentials = new System.Net.NetworkCredential("senders gmail account username here", "senders gmail account password here"); client.EnableSsl = true;