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

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

ACTUALIZACIÓN: He intentado con todas las respuestas (aceptadas o no) en la otra pregunta, pero ninguna de ellas funciona.

Solo me gustaría saber si funciona para cualquier otra persona, de lo contrario, Google puede haber cambiado algo (lo que ha sucedido antes).

Cuando pruebo el fragmento de código que usa SmtpDeliveryMethod.Network , recibo rápidamente una SmtpException en Send (message). 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 Autenticación requerida. Obtenga más información en “<- en serio, termina allí.

ACTUALIZAR:

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

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

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

En realidad, en algún momento tuve un problema en mi código. No lo detecté hasta que tuve una versión más simple en un progtwig de consola y vi que estaba funcionando (no hubo cambios en el lado de Gmail porque te preocupaba). El siguiente código funciona igual que las muestras a las que se refiere:

 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("myusername@gmail.com", "mypwd"), EnableSsl = true }; client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody"); Console.WriteLine("Sent"); Console.ReadLine(); } } } 

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

LO SIGUIENTE CASUALMENTE SERÁ LA RESPUESTA A SU PREGUNTA SI EL RESTO HA FALLADO :

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

Luego, para un experimento, traté de cambiar mi contraseña a mi contraseña anterior para ver qué sucedería, y Gmail no me permitió hacer esto, citando el motivo “lo siento, no podemos permitir que guardes este cambio como tu elección”. la contraseña es muy débil “y no me deja volver a mi contraseña anterior. A partir de esto, pensé que estaba extrayendo el mensaje 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 al intentar ingresar EN CUALQUIER LUGAR! Este (número 2) es el escenario más probable, ya que mi contraseña débil tenía alrededor de 4 meses y me permite usarla en Gmail.

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

¡Espero que esto ayude!

Además de los otros pasos de solución de problemas anteriores, también me gustaría agregar que si habilitó la autenticación de dos factores (también conocida como verificación en dos pasos ) en su cuenta de GMail, debe generar una contraseña específica de la aplicación y usarla nuevamente. contraseña generada para autenticarse 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.

 Turn On Access For Less Secure Apps and it will work for all no need to change password. 

Enlace a la configuración de Gmail

enter image description here

Tuve algunos problemas al enviar correos electrónicos desde mi cuenta de gmail también, que se debieron a varias de las situaciones antes mencionadas. Aquí hay un resumen de cómo lo hice funcionar, y mantenerlo flexible al mismo tiempo:

  • Antes que nada 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 fuerte (según Google)
    • Asegúrese de no tener que ingresar primero un código de captcha. Puede hacerlo enviando un correo electrónico de prueba desde su navegador.
  • Realice cambios en web.config (o app.config, todavía no lo he intentado pero supongo que es igual de fácil hacer que funcione en una aplicación de Windows):
      ...           
 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("webmaster@example.com") SSLMail.SendMail(e) End Sub End Class 

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

 SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"}) 

¡Espero que esto ayude a cualquiera que se encuentre con esta publicación! (Utilicé VB.NET, pero creo que es trivial convertirlo a cualquier lenguaje .NET).

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

Si obtiene 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 Autenticación requerida. Obtenga más información en” como lo hago antes, asegúrese de que la línea SMTPClientObj.UseDefaultCredentials = False incluido y esta línea debe estar antes de SMTPClientObj.Credentials .

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

Oh … Es increíble … Primero, no pude enviar un correo electrónico por ningún motivo. Pero después de que cambié la secuencia de estas dos líneas como a continuación, funciona perfectamente.

 //(1) client.UseDefaultCredentials = true; //(2) client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password"); 

¡¡¡Espero que esto ayude!!! 🙂

El problema no es la capacidad técnica para enviar a través de Gmail. Eso funciona para la mayoría de las situaciones. Si no puede enviar 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 al que se 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 comienzas a ver errores, baja la velocidad de envío y deja de enviar por un tiempo. Si sigue tratando de enviar, a veces, Google agregará tiempo adicional a su período de retraso antes de poder enviar nuevamente.

Lo que he hecho en mi sistema actual es enviar con un retraso de 1,5 segundos entre cada mensaje. Luego, si recibo algún error, deténgase durante 5 minutos y luego comience nuevamente. Esto generalmente funciona y le permitirá enviar hasta los límites de la cuenta (la última vez que revisé fue de 2.000 para los inicios de sesión del cliente de primer nivel por día).

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

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

        

Es posible que primero deba 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 …

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 https://www.google.com/settings/security/lesssecureapps y habilite el acceso para aplicaciones menos seguras.

¡Esto funcionó para mí, espero que funcione para otra persona!

Pasos simples para arreglar esto:

1) Inicia sesión en tu Gmail

2) Navega a esta página https://www.google.com/settings/security/lesssecureapps y configura como “Activar”

@Andres Pompiglio: Sí, es correcto, debe cambiar su contraseña al menos una vez. Este código funciona 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
"; } catch (Exception ex) { msg = ex.Message; } return msg; } //End Send Email Function

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

 Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body")) 

También descubrí que Google había desactivado la cuenta que usaba para iniciar sesión por alguna razón. Una vez que reinicié mi contraseña (al igual que solía ser), pude enviar correos electrónicos sin problemas. Estaba recibiendo un mensaje de 5.5.1 también.

También intenté muchas soluciones, pero hice algunos cambios, funcionará

 host = smtp.gmail.com port = 587 username = email@gmail.com password = password enabledssl = true 

con smtpclient encima de los parámetros funcionan en gmail

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

Me encontré con este mismo error ( “El servidor SMTP requiere una conexión segura o el cliente no fue autenticado. La respuesta del servidor fue: 5.5.1 Autenticación requerida. Obtenga más información en” ) y descubrió que estaba usando una contraseña incorrecta. Repare 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.

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 como contraseña, 123456, etc.)

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

Mi problema era que estaba ejecutando el código de 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 y accedí a 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 la comprobación de seguridad, pude autenticarme a través del código.

Otra posible solución para ti. Estaba teniendo problemas similares para conectarme a Gmail a través de IMAP. Después de probar todas las soluciones que encontré que leerá aquí y en otros lugares en SO (por ejemplo, habilite IMAP, habilite un acceso menos seguro a su correo, usando https://accounts.google.com/b/0/displayunlockcaptcha y etc.), de hecho configuré 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 tal fin.

Entonces, cuando creé una nueva cuenta y no la conecté a mi cuenta principal, después de seguir todos los pasos apropiados, ¡me pareció que funcionaba bien!

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

Active aplicaciones menos seguras para su cuenta: https://www.google.com/settings/security/lesssecureapps

  1. Primero compruebe la configuración de su cuenta de Gmail y active “Acceso para aplicaciones menos seguras” enter image description here

Le recomendamos encarecidamente que utilice una aplicación segura, como Gmail, para acceder a su cuenta. Todas las aplicaciones creadas por Google cumplen con estos estándares de seguridad. Usar 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); 

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 deba 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 trata en http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx , y yo proporcionó un ejemplo de cómo usar el CDO (Objeto de datos colaborativos) en otra discusión ( GMail SMTP a través de errores C # .Net en todos los puertos ).

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.

inicie sesión en la cuenta y trate de enviar un correo manualmente. Si se ha alcanzado el límite, le informará

Una o más razones están ahí para estos errores.

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

  • También verifique si la aplicación es menos segura y configúrela como “Activar” aquí es el enlace para GMAIL. https://www.google.com/settings/security/lesssecureapps

  • marca 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á usando actualmente. 25 es global, pero puedes consultarlo también para otros, como 587. mira aquí. ¿Toda comunicación SMTP ocurre más de 25?

  • SI ESTÁ EN EL 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; 

Cambia tu contraseña de Gmail y vuelve a intentarlo, debería funcionar después de eso.

No sé por qué, pero cada vez que cambie su hosting, debe cambiar su contraseña.