visual studio net form envio enviar electronico desde correos correo con asp archivo adjunto c# .net email smtp gmail

studio - enviar email c# windows form



Envío de correo electrónico a través del servidor SMTP de Gmail con C# (27)

  1. Primero verifique la configuración de su cuenta de gmail y active "Acceso para aplicaciones menos seguras"

Le recomendamos encarecidamente que utilice una aplicación segura, como Gmail, para acceder a su cuenta. Todas las aplicaciones hechas por Google cumplen con estos estándares de seguridad. El uso de una aplicación menos segura, por otro lado, podría dejar su cuenta vulnerable. Aprende más.

  1. Conjunto

    smtp.UseDefaultCredentials = false;

    antes de

    smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);

Por alguna razón, ni la respuesta aceptada ni ninguna otra funcionan conmigo para " Enviar correo electrónico en .NET a través de Gmail ". ¿Por qué no trabajarían?

ACTUALIZACIÓN: He intentado todas las respuestas (aceptadas y de otro tipo) en la otra pregunta, pero ninguna de ellas funciona.

Solo me gustaría saber si funciona para alguien más, de lo contrario, Google podría haber cambiado algo (lo que ha ocurrido antes).

Cuando intento el fragmento de código que utiliza SmtpDeliveryMethod.Network , recibo rápidamente una SmtpException en Enviar (mensaje). El mensaje es

El servidor SMTP requiere una conexión segura o el cliente no fue autenticado.

La respuesta del servidor fue:

5.5.1 Se requiere autenticación. Aprende más en "<- en serio, ahí termina.

ACTUALIZAR:

Esta es una pregunta que hice hace mucho tiempo, y la respuesta aceptada es el código que he usado muchas, muchas veces en diferentes proyectos.

He tomado algunas de las ideas de esta publicación y otros proyectos de EmailSender para crear un proyecto de EmailSender en Codeplex . Está diseñado para probarse y es compatible con mis servicios SMTP favoritos, como GoDaddy y Gmail.


@Andres Pompiglio: Sí, es correcto, debe cambiar su contraseña al menos una vez ... estos códigos funcionan bien:

//Satrt Send Email Function public string SendMail(string toList, string from, string ccList, string subject, string body) { MailMessage message = new MailMessage(); SmtpClient smtpClient = new SmtpClient(); string msg = string.Empty; try { MailAddress fromAddress = new MailAddress(from); message.From = fromAddress; message.To.Add(toList); if (ccList != null && ccList != string.Empty) message.CC.Add(ccList); message.Subject = subject; message.IsBodyHtml = true; message.Body = body; // We use gmail as our smtp client smtpClient.Host = "smtp.gmail.com"; smtpClient.Port = 587; smtpClient.EnableSsl = true; smtpClient.UseDefaultCredentials = true; smtpClient.Credentials = new System.Net.NetworkCredential( "Your Gmail User Name", "Your Gmail Password"); smtpClient.Send(message); msg = "Successful<BR>"; } catch (Exception ex) { msg = ex.Message; } return msg; } //End Send Email Function

Y puedes hacer una llamada a la función usando:

Response.Write(SendMail(recipient Address, "[email protected]", "ccList if any", "subject", "body"))



Además de los otros pasos de solución de problemas anteriores, también me gustaría agregar que si ha habilitado la autenticación de dos factores (también conocida como verificación de dos pasos ) en su cuenta de GMail, debe generar una contraseña específica de la aplicación y usar esa nueva contraseña. Contraseña generada para autenticar a través de SMTP .

Para crear uno, visite: https://www.google.com/settings/ y elija Autorizar aplicaciones y sitios para generar la contraseña.


CVertex, asegúrese de revisar su código y, si eso no revela nada, publíquelo. Acabo de habilitar esto en un sitio de prueba ASP.NET en el que estaba trabajando, y funciona.

En realidad, en algún momento tuve un problema con mi código. No lo detecté hasta que tuve una versión más simple en un programa de consola y vi que funcionaba (no hubo cambios en el lado de Gmail, ya que estaba preocupado). El siguiente código funciona igual que las muestras a las que hizo referencia:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; using System.Net; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { var client = new SmtpClient("smtp.gmail.com", 587) { Credentials = new NetworkCredential("[email protected]", "mypwd"), EnableSsl = true }; client.Send("[email protected]", "[email protected]", "test", "testbody"); Console.WriteLine("Sent"); Console.ReadLine(); } } }

También lo puse en funcionamiento usando una combinación de web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx y el código (porque no hay EnableSsl coincidente en el archivo de configuración :().


Cambie su contraseña de gmail e inténtelo de nuevo, debería funcionar después de eso.

No sé por qué, pero cada vez que cambie su alojamiento, tendrá que cambiar su contraseña.


El problema no es el de la capacidad técnica para enviar a través de gmail. Eso funciona para la mayoría de las situaciones. Si no puede hacer que se envíe una máquina, generalmente se debe a que la máquina no se ha autenticado con un humano en los controles al menos una vez.

El problema que enfrentan la mayoría de los usuarios es que Google decide cambiar los límites de salida todo el tiempo. Siempre debe agregar código defensivo a su solución. Si comienza a ver los errores, baje la velocidad de envío y deje de enviar por un tiempo. Si sigue intentando enviar Google, algunas veces agregará tiempo adicional a su período de retraso antes de que pueda volver a enviar.

Lo que he hecho en mi sistema actual es enviar con un retraso de 1.5 segundos entre cada mensaje. Luego, si aparece algún error, pare durante 5 minutos y luego comience de nuevo. Por lo general, esto funciona y le permitirá enviar hasta los límites de la cuenta (la última vez que verifiqué fue de 2,000 inicios de sesión de clientes principales por día)


Estaba usando la conexión VPN corporativa. Fue la razón por la que no pude enviar correos electrónicos desde mi aplicación. Funciona si me desconecto de VPN.


LO SIGUIENTE ES CASI CERCANO QUE SEA LA RESPUESTA A SU PREGUNTA, SI TODO LO QUE HA FALLADO :

Recibí exactamente el mismo error, resulta que el nuevo algoritmo de medición de la fuerza de la contraseña de Google ha cambiado considerando que mi contraseña actual es demasiado débil, y no me dice nada al respecto (ni siquiera un mensaje o advertencia) ... ¿Cómo descubrí esto? ? Bueno, elegí cambiar mi contraseña para ver si ayudaría (probé todo lo demás sin éxito) y cuando cambié mi contraseña, ¡funcionó!

Luego, para un experimento, intenté cambiar mi contraseña de nuevo a mi contraseña anterior para ver qué sucedería, y Gmail no me permitió hacerlo, citando el motivo "lo sentimos, no podemos permitirle guardar este cambio como lo eligió. la contraseña es demasiado débil "y no me permitiría volver a mi contraseña anterior. A partir de esto, me di cuenta de que se estaba produciendo un error porque a) necesita cambiar su contraseña una vez cada x cantidad de meses o b). como dije antes, sus algoritmos de seguridad de contraseñas cambiaron y, por lo tanto, la contraseña débil que tenía no fue aceptada, ¡aunque no dijeron nada sobre esto cuando intentaron iniciar sesión EN CUALQUIER LUGAR! Este (el número 2) es el escenario más probable, ya que mi contraseña débil tenía aproximadamente 4 meses y me permitió usarla en Gmail.

Es bastante malo que no dijeran nada de esto, pero tiene sentido. Debido a que la mayoría de los correos electrónicos secuestrados inician sesión utilizando software fuera de Gmail, y supongo que se requiere que tenga una contraseña más segura si desea usar Gmail fuera del entorno de Gmail.

¡Espero que esto ayude!


Me encontré con este mismo error ( "El servidor SMTP requiere una conexión segura o el cliente no se autenticó. La respuesta del servidor fue: 5.5.1 Se requiere autenticación. Obtenga más información en" ) y descubrí que estaba usando la contraseña incorrecta. Fijé las credenciales de inicio de sesión, y se envió correctamente.

Sé que esto es tarde, pero tal vez esto ayude a alguien más.


No estoy seguro de qué versión de .NET se requiere para esto porque eglasius mencionó que no hay una configuración de enableSsl coincidente (estoy usando .NET 4.0, pero sospecho que funciona en .NET 2.0 o posterior), pero esta configuración solo funcionó para mí (y no requiere que uses ninguna configuración programática):

<system.net> <mailSettings> <smtp from="[email protected]" deliveryMethod="Network"> <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="[email protected]"/> </smtp> </mailSettings> </system.net>

Es posible que primero tenga que habilitar POP o IMAP en su cuenta de Gmail: https://mail.google.com/mail/?shva=1#settings/fwdandpop

Recomiendo probarlo primero con un cliente de correo normal ...


Oh ... es increíble ... Primero no pude enviar un correo electrónico por ninguna razón. Pero después de cambiar la secuencia de estas dos líneas como se muestra a continuación, funciona perfectamente.

//(1) client.UseDefaultCredentials = true; //(2) client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");

¡¡¡Espero que esto ayude!!! :)


Otra cosa que he encontrado es que debes cambiar tu contraseña al menos una vez. Y trate de usar una contraseña de nivel seguro (no use el mismo usuario que la contraseña, 123456, etc.)


Otra solución posible para usted. Estaba teniendo problemas similares al conectarse a gmail a través de IMAP. Después de probar todas las soluciones que encontré sobre las que leerá aquí y en otros lugares en SO (por ejemplo, habilite IMAP, habilite un acceso menos seguro a su correo, use https://accounts.google.com/b/0/displayunlockcaptcha y así sucesivamente), en realidad configuro una nueva cuenta de gmail una vez más.

En mi prueba original, la primera cuenta de gmail que había creado, me había conectado a mi cuenta principal de gmail. Esto dio lugar a un comportamiento errático en el que Google hacía referencia a la cuenta incorrecta. Por ejemplo, ejecutar https://accounts.google.com/b/0/displayunlockcaptcha abrió mi cuenta principal en lugar de la que había creado para este propósito.

Entonces, cuando creé una nueva cuenta y no la conecté a mi cuenta principal, después de seguir todos los pasos apropiados como se indicó anteriormente, ¡encontré que funcionó bien!

Todavía no lo he confirmado (es decir, se ha reproducido), pero aparentemente lo hizo por mí ... espero que ayude.



Recibí el mismo error y ninguna de las soluciones anteriores me ayudó.

Mi problema era que estaba ejecutando el código desde un servidor remoto, que nunca se había utilizado para iniciar sesión en la cuenta de gmail.

Abrí un navegador en el servidor remoto e inicié sesión en gmail desde allí. Hizo una pregunta de seguridad para verificar que era yo, ya que esta era una nueva ubicación. Después de hacer el control de seguridad, pude autenticarme a través del código.


Si nada más ha funcionado aquí para usted, es posible que deba permitir el acceso a su cuenta de gmail desde aplicaciones de terceros. Este fue mi problema Para permitir el acceso haga lo siguiente:

  1. Inicia sesión en tu cuenta de gmail.
  2. Visite esta página https://accounts.google.com/DisplayUnlockCaptcha y haga clic en el botón para permitir el acceso.
  3. Visite esta página google.com/settings/security/lesssecureapps y habilite el acceso para aplicaciones menos seguras.

Esto funcionó para mí, espero que funcione para alguien más.


También descubrí que la cuenta que solía iniciar sesión estaba desactivada por Google por algún motivo. Una vez que restablecí mi contraseña (al mismo que solía ser), pude enviar correos electrónicos muy bien. Estaba recibiendo mensaje 5.5.1 también.


También he intentado muchas soluciones pero hacer algunos cambios funcionará

host = smtp.gmail.com port = 587 username = [email protected] password = password enabledssl = true

con smtpclient los parámetros anteriores funcionan en gmail


También he tenido algunos problemas para enviar correos electrónicos desde mi cuenta de gmail, debido a varias de las situaciones mencionadas anteriormente. Aquí hay un resumen de cómo lo puse en funcionamiento y lo mantuve flexible al mismo tiempo:

  • En primer lugar, configure su cuenta de Gmail:
    • Habilite IMAP y afirme la cantidad máxima correcta de mensajes (puede hacerlo aquí)
    • Asegúrese de que su contraseña tenga al menos 7 caracteres y sea segura (según Google)
    • Asegúrate de no tener que ingresar primero un código captcha. Puede hacerlo enviando un correo electrónico de prueba desde su navegador.
  • Haga cambios en web.config (o app.config, no lo he intentado todavía, pero supongo que es igual de fácil hacer que funcione en una aplicación de Windows):

<configuration> <appSettings> <add key="EnableSSLOnMail" value="True"/> </appSettings> <!-- other settings --> ... <!-- system.net settings --> <system.net> <mailSettings> <smtp from="[email protected]" deliveryMethod="Network"> <network defaultCredentials="false" host="smtp.gmail.com" port="587" password="stR0ngPassW0rd" userName="[email protected]" /> <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you''re all set--> </smtp> </mailSettings> </system.net> </configuration>

Add a Class to your project: Imports System.Net.Mail Public Class SSLMail Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) GetSmtpClient.Send(e.Message) ''Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too: e.Cancel = True End Sub Public Shared Sub SendMail(ByVal Msg As MailMessage) GetSmtpClient.Send(Msg) End Sub Public Shared Function GetSmtpClient() As SmtpClient Dim smtp As New Net.Mail.SmtpClient ''Read EnableSSL setting from web.config smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail")) Return smtp End Function End Class

Y ahora, cuando quiera enviar correos electrónicos, todo lo que necesita hacer es llamar a SSLMail.SendMail :

Por ejemplo, en una página con un control PasswordRecovery:

Partial Class RecoverPassword Inherits System.Web.UI.Page Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail e.Message.Bcc.Add("[email protected]") SSLMail.SendMail(e) End Sub End Class

O en cualquier parte de tu código puedes llamar:

SSLMail.SendMail(New system.Net.Mail.MailMessage("[email protected]","[email protected]", "Subject", "Body"})

Espero que esto ayude a cualquiera que se encuentre con este post! (Utilicé VB.NET pero creo que es trivial convertirlo a cualquier lenguaje .NET).


También puede conectarse a través del puerto 465, pero debido a algunas limitaciones del espacio de nombres System.Net.Mail, es posible que tenga que modificar su código. Esto se debe a que el espacio de nombres no ofrece la capacidad de realizar conexiones SSL implícitas. Esto se discute en http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx , y han proporcionado un ejemplo de cómo usar el CDO (Objeto de datos de colaboración) en otra discusión ( GMail SMTP a través de errores de C # .Net en todos los puertos ).


Tuve el mismo problema, pero resultó que mi protección contra virus estaba bloqueando el correo electrónico saliente "spam". Apagar esto me permitió usar el puerto 587 para enviar correos electrónicos SMTP a través de GMail


Tuve este problema resuelto Aparentemente ese mensaje se usa en múltiples tipos de error. Mi problema era que había alcanzado mi máximo de 500 correos enviados.

Inicia sesión en la cuenta e intenta enviar un correo manualmente. Si se ha alcanzado el límite te lo informará.


Una o más razones existen para estos errores.

  • Inicie sesión con su Gmail (o cualquier otro si) en su sistema local.

  • También verifique que la aplicación sea menos segura y configúrela como "Activar" aquí está el enlace para GMAIL. google.com/settings/security/lesssecureapps

  • verifica EnableSsl en tu código de correo electrónico, y también configúralo en verdadero.

    smtp.EnableSsl = true;

  • También verifique qué puerto está utilizando actualmente. 25 es Global, pero también puede verificarlo para otros, como 587. consulte aquí. ¿Toda la comunicación SMTP ocurre más de 25?

  • SI ESTÁ EN CONTROL REMOTO : verifique la respuesta de Vlad Tamas arriba.


smtp.Host = "smtp.gmail.com"; //host name smtp.Port = 587; //port number smtp.EnableSsl = true; //whether your smtp server requires SSL smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); smtp.Timeout = 20000;


Dim SMTPClientObj As New Net.Mail.SmtpClient SMTPClientObj.UseDefaultCredentials = False SMTPClientObj.Credentials = New System.Net.NetworkCredential("[email protected]", "mypwd") SMTPClientObj.Host = "smtp.gmail.com" SMTPClientObj.Port = 587 SMTPClientObj.EnableSsl = True SMTPClientObj.Send("[email protected]","[email protected]","test","testbody")

Si recibe un error como "El servidor SMTP requiere una conexión segura o el cliente no fue autenticado. La respuesta del servidor fue: 5.5.1 Se requiere autenticación. Obtenga más información en" como lo obtengo antes de esto, asegúrese de que la línea SMTPClientObj.UseDefaultCredentials = False incluido y esta línea debe SMTPClientObj.Credentials antes de SMTPClientObj.Credentials .

Intenté cambiar estas 2 líneas de forma opuesta y se devolvió el error de autenticación requerida 5.5.1 .