Estoy usando la SmtpClient
biblioteca 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 utilizo servidores SMTP de producción, el código falla con un SmtpException
"Error al enviar correo". con un interior IOException
"No se pueden 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.
Cambie el puerto de 465 a 587 y funcionará.
fuente
Para cualquiera que se encuentre 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;
¡Espero que esto ayude!
fuente
Es posible que también deba cambiar la configuración de "aplicaciones menos seguras" en su cuenta de Gmail. EnableSsl, use el puerto 587 y habilite "aplicaciones menos seguras". Si busca en Google la parte de aplicaciones menos seguras, hay páginas de ayuda de Google que lo vincularán directamente a la página de su cuenta. Ese era mi problema, pero todo está funcionando ahora gracias a todas las respuestas anteriores.
fuente
Probé todas las respuestas anteriores, pero sigo recibiendo este error con la cuenta de Office 365. El código parece funcionar bien con la cuenta de Google y smtp.gmail.com cuando se permiten aplicaciones menos seguras.
¿Alguna otra sugerencia que pueda probar?
Aquí está el código que estoy usando
ACTUALIZACIÓN Y CÓMO LO RESUELVE:
Problema resuelto cambiando Smtp Client a Mailkit. Microsoft no recomienda el uso del Cliente Smtp System.Net.Mail debido a problemas de seguridad y, en su lugar, debería utilizar MailKit. El uso de Mailkit me dio mensajes de error más claros que podía entender para encontrar la causa raíz del problema (problema de licencia). Puede obtener Mailkit descargándolo como un paquete Nuget .
Lea la documentación sobre Smtp Client para obtener más información: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
Así es como implementé SmtpClient con MailKit
fuente
¿Su biblioteca SMTP admite una conexión cifrada? El servidor de correo puede estar esperando una conexión TLS segura y, por lo tanto, cerrar la conexión en ausencia de un protocolo de enlace TLS
fuente
SmtpClient
biblioteca .NET predeterminada , admite el cifrado, el servidor requiere cifrado y lo he configuradoclient.EnableSssl = true;
. Aunque creo que voy a persistir un poco más en esto con Wireshark.Si está utilizando un servidor SMTP en la misma caja y su SMTP está vinculado a una dirección IP en lugar de "Cualquiera asignada", puede fallar porque está intentando usar una dirección IP (como 127.0.0.1) que SMTP no está funcionando actualmente. en.
fuente
Para elevar lo que jocull mencionó en un comentario, estaba haciendo todo lo que se menciona en este hilo y tachando ... porque el mío estaba en un bucle para que se repitiera una y otra vez; después de la primera vez que pasaba por el bucle, a veces fallaba. Siempre trabajó la primera vez a través del bucle.
Para ser claros: el bucle incluye la creación de SmtpClient y luego hacer .Send con los datos correctos. El SmtpClient se creó dentro de un bloque try / catch, para detectar errores y asegurarse de que el objeto se destruyó antes del final del ciclo.
En mi caso, la solución fue asegurarse de que SmtpClient se eliminara después de cada vez en el ciclo (ya sea mediante la instrucción using () o mediante una eliminación manual). Incluso si el objeto SmtpClient se destruye implícitamente en el ciclo, .NET parece estar dejando cosas por ahí que entran en conflicto con el próximo intento.
fuente
Cambie su número de puerto de 465 a 587
fuente
quitar
pareció resolverlo por mí.
fuente
En caso de que todas las soluciones anteriores no funcionen para usted, intente actualizar el siguiente archivo en su servidor (me refiero a publicar, y una compilación anterior sería útil).
Después de la actualización, verá este error. como he resuelto con esta solución.
fuente
En mi caso, el cliente olvidó agregar una nueva dirección IP en su configuración SMTP. Abra IIS 6.0 en el servidor que configura el smtp, haga clic con el botón derecho en el servidor virtual Smtp, elija Propiedades, pestaña Acceso, haga clic en Conexiones, agregue la dirección IP del nuevo servidor. Luego haga clic en Relay, también agregue la dirección IP del nuevo servidor. Esto resolvió mi problema.
fuente
Pruebe esto: aquí está el código que estoy usando para enviar correos electrónicos a varios usuarios.
fuente
SmtpClient
también es desechable, por lo que debe envolverse en unusing
bloquePara Outlook use la siguiente configuración que no me está dando error
Nombre del servidor SMTP smtp-mail.outlook.com
Puerto SMTP 587
fuente
Este error es muy genérico. Puede deberse a muchas razones, como El servidor de correo es incorrecto. Algunas empresas de alojamiento utilizan el formato mail.domainname. Si solo usa el nombre de dominio, no funcionará. compruebe las credenciales nombre de host nombre de usuario contraseña si es necesario Consulte con la empresa de alojamiento.
fuente
En mi caso, la IP del servidor web se bloqueó en el servidor de correo, su empresa de alojamiento debe desbloquearla y ponerla en la lista blanca. Además, use el puerto 587.
fuente
Si su servidor de correo es Gmail (smtp.google.com), recibirá este error cuando alcance el límite de mensajes. Gmail permite enviar a través de SMTP hasta solo 2000 mensajes por 24 horas.
fuente
Me encontré con esto cuando usaba smtp.office365.com, usando el puerto 587 con SSL. Pude iniciar sesión en la cuenta usando portal.office.com y pude confirmar que la cuenta tenía una licencia. Pero cuando disparé el código para enviar correos electrónicos, seguí recibiendo el error net_io_connectionclosed.
Me tomó algo de tiempo resolverlo, pero el administrador de Exchange encontró al culpable. Estamos usando O365 pero el servidor Exchange estaba en un entorno híbrido. Aunque la cuenta que intentábamos usar estaba sincronizada con Azure AD y tenía una licencia válida de O365, por alguna razón, el buzón aún residía en el servidor híbrido de Exchange, no en Exchange online. Después de que el administrador de intercambio usó el comando "Move-Mailbox" para mover el buzón del servidor de intercambio híbrido a O365, pudimos usar el código para enviar correos electrónicos usando o365.
fuente
Prepare: 1. HostA es un servidor virtual SMTP con el puerto predeterminado 25 2. HostB es una estación de trabajo en la que envío correo con SmtpClient y simulo una red inestable que uso torpe
Caso 1 dado si HostB es 2008R2 cuando envío un correo electrónico. Entonces ocurre este problema.
Caso 2 dado si HostB es 2012 o una versión superior cuando envío un correo electrónico. Luego se envió el correo.
Conclusión: esta causa raíz está relacionada con Windows Server 2008R2.
fuente