No se puede autenticar a smtp de Gmail a través de MailMessage y smtpClient

No puedo entender la vida de mi por qué esto no está funcionando

SmtpClient smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, UseDefaultCredentials = false, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"), EnableSsl = true, Timeout = 10000 }; smtp.Send(mail); 

Yo obtengo:

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.

Acabo de especificar EnableSsl en true, por lo que ese no debería ser el problema en términos de conexión segura.

Estoy ejecutando esto desde localhost. Y sí, mi nombre de usuario y contraseña que estoy ingresando para auth (mis credenciales de cuenta de gmail) son 100% correctos.

Sé que este es un tema antiguo, PERO … Google ha cambiado algo en su configuración de seguridad.

Estaba luchando con todas las respuestas hasta que revisé mi correo electrónico con un correo de Google que decía que “recientemente hemos bloqueado un bash de inicio de sesión en su cuenta de Google”.

Eso me llevó a esta página: Seguridad de cuenta de Google

En la sección “Acceso para aplicaciones menos seguras”, puede habilitar el acceso a su cuenta desde otros dispositivos / aplicaciones … como su aplicación C #.

Tenga en cuenta que ya no existe una sección “específica de la aplicación”.

Espero que esto ayude a alguien … Perdí 30 minutos de mi vida …

Si la información de inicio de sesión es 100% correcta, primero debe establecer UseDefaultCredentials = false y luego establecer las credenciales que desea usar Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere") .

Si establece las credenciales primero, cuando configure UseDefaultCredentials = false , la propiedad Credentials se UseDefaultCredentials = false .

Esto está conectado, pero me pasó a mí.

Depure su código y verifique si la propiedad Credentials es nula antes de llamar a smtp.Send(message); . Si es así, intente invertir el orden. Parece que lo tienes en el orden correcto, pero si es nulo, no uses la inicialización en línea.

Espero eso ayude.

EDITAR: si está utilizando la verificación en dos pasos, asegúrese de estar utilizando una contraseña específica de la aplicación

Parece que Gmail requiere una contraseña específica de la aplicación (no tu contraseña principal).

Mire esto: http://support.google.com/mail/bin/answer.py?hl=es&answer=1173270

Tuve el mismo problema recientemente.

Tuve este problema antes y lo solucioné siguiendo estos pasos:

  1. Vaya a la configuración de ” Mi cuenta “.
  2. Haga clic en la categoría ” Iniciar sesión y seguridad “.
  3. Desplázate hacia la sección ” Aplicaciones y sitios conectados “.
  4. desactive la opción ” Permitir aplicaciones menos seguras “.

Acabo de desactivar esta opción y mi código se ejecutó con éxito.

Esto funcionó bien para mí

 SmtpClient smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, UseDefaultCredentials = false, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential("myid@gmail.com", "mypassword"), EnableSsl = true, Timeout = 10000 }; MailMessage message = new MailMessage(); message.Body = "hello there"; message.Subject = "hi!!"; message.To.Add("myid@gmail.com"); message.From = new MailAddress("myid@gmail.com"); smtp.Send(message); 

Para mí, la solución requería 2 “pasos”:

  • establezca UseDefaultCredentials = false primero, luego configure las credenciales que deseo usar Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere") . Establecer las credenciales primero, cuando establezco UseDefaultCredentials = false hará que la propiedad Credentials sea null .
  • Permitir aplicaciones menos seguras en mi perfil de Google.

Tener una callback de la siguiente manera. ¡Dile a System.Net que ignore el error!

Agregar esto antes de llamar a Send()

 ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; smtp.Send(mail); 
      

Editar: intente agregar esta línea smtp.Credentials = Credentials después de esto

Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),

Tuve el mismo problema al acceder a smtp.gmail.com desde una aplicación ASP.NET que se ejecuta en el alojamiento de Amazon AWS. Resultó que mi configuración era correcta – también funcionaba bien desde otra computadora – pero gmail me negaría mi bash de inicio de sesión, porque bash iniciar sesión desde una ubicación inusual. Me conecté a gmail a través de la interfaz web (www.gmail.com) y tuve que responder un captcha. Después de eso funcionó.

Mi problema era que el propietario del dominio de nuestra cuenta de gmail había desactivado tanto el “Acceso para aplicaciones menos seguras” como la autenticación en dos pasos. No había forma de habilitarlo, ni siquiera podía ver la configuración. Entonces probé con mi cuenta personal y funcionó bien.

Muy simple solo siga esto para la aplicación C # WPF:

  private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass) { using (MailMessage mailMessage = new MailMessage()) { mailMessage.From = new MailAddress(MailMsgFrom); mailMessage.Subject = subject; mailMessage.Body = body; mailMessage.IsBodyHtml = true; mailMessage.To.Add(new MailAddress(recepientEmail)); mailMessage.Priority = System.Net.Mail.MailPriority.High; SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.gmail.com"; smtp.EnableSsl = true; smtp.Timeout = 200000; System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(); NetworkCred.UserName = MailMsgFrom; NetworkCred.Password = MailMsgPass; smtp.UseDefaultCredentials = true; smtp.Credentials = NetworkCred; smtp.Port = 587; smtp.Send(mailMessage); } } 

Después de eso deberías obtener así Error

 smtpException {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"} System.Net.Mail.SmtpException 

Para resolver este problema, primero inicie sesión en su cuenta de correo electrónico a su cuenta de Google en el navegador web. Luego solo sigue este enlace Actividad de la cuenta de Google . Luego obtendrás dispositivos y actividades recientes en tu cuenta. Si show bloquea tu actividad actual desde tu dispositivo actual. Solo desbloquea esto. Luego intente de nuevo enviar un correo electrónico.
Gracias