Error de Gmail: 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

260

Estoy usando el siguiente código para enviar un correo electrónico. El código funciona correctamente en mi máquina local. Pero en el servidor de producción recibo el mensaje de error

var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

Y en mi Gmail A / c recibí el siguiente correo electrónico después de ejecutar el código desde el servidor de producción

Hola ,

Recientemente, alguien usó su contraseña para intentar iniciar sesión en su cuenta de Google [email protected]. Esta persona estaba usando una aplicación como un correo electrónico, un cliente o un dispositivo móvil.

Evitamos el intento de inicio de sesión en caso de que se tratara de un secuestrador intentando acceder a su cuenta. Revise los detalles del intento de inicio de sesión:

Viernes 3 de enero de 2014 13:56:08 en punto UTC Dirección IP: xxx.xx.xx.xxx (abcd.net.) Ubicación: Philadelphia PA, Philadelphia, PA, EE. UU.

Si no reconoce este intento de inicio de sesión, alguien más podría estar intentando acceder a su cuenta. Debe iniciar sesión en su cuenta y restablecer su contraseña de inmediato.

Restablecer la contraseña

Si fue usted y tiene problemas para acceder a su cuenta, complete los pasos de solución de problemas enumerados en http://support.google.com/mail?p=client_login

Atentamente, el equipo de Cuentas de Google

vcs
fuente
¿tiene acceso al servidor de producción
Arshad
No tengo acceso al servidor de producción
vcs
Desactiva la verificación en dos pasos ...
Mangesh
1
Además, asegúrese de que Google "Captcha" esté desactivado; esto puede ser necesario si está ejecutando el script en un servidor remoto (no es necesario cuando se ejecuta en una máquina local): accounts.google.com/DisplayUnlockCaptcha
Jens

Respuestas:

197

Esto generalmente ocurre cuando intenta iniciar sesión desde una zona horaria diferente o una computadora con dirección IP. Su servidor de producción y la identificación de correo que ha utilizado están en diferentes zonas horarias. Elija cualquiera de estas dos soluciones:

1) Inicie sesión en el servidor de producción mediante acceso remoto e inicie sesión en gmail una vez con sus credenciales. Le pedirán la confirmación, la confirmarán y cerrarán sesión.

O 2) inicie sesión en Gmail en su computadora local, siga este enlace y elija revisar esta actividad y tomar las medidas adecuadas.

Arshad
fuente
21
Un pequeño comentario: vaya a security.google.com/settings/security/activity y aquí verá una conexión bloqueada de su código. Permítales y debería ayudar en este caso.
Alex Zhukovskiy
68
Esto también ayudará mucho: google.com/settings/security/lesssecureapps
George
Sí, la razón es que la verificación de 2 pasos está activada para la cuenta de Gmail. Seleccione Aplicación / Dispositivo y haga clic en el botón Generar support.google.com/accounts/answer/185833
smily
8
Además, asegúrese de que Google "Captcha" esté desactivado; esto puede ser necesario si está ejecutando el script en un servidor remoto (no es necesario cuando se ejecuta en una máquina local): accounts.google.com/DisplayUnlockCaptcha
Jens
301

Cuando intenta enviar correo desde el código y encuentra el 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", entonces el error puede ocurrir debido a los siguientes casos.

caso 1: cuando la contraseña es incorrecta

caso 2: cuando intenta iniciar sesión desde alguna aplicación

caso 3: cuando intenta iniciar sesión desde el dominio que no sea su zona horaria / dominio / computadora (este es el caso en la mayoría de los escenarios al enviar correo desde el código)

Hay una solución para cada

solución para el caso 1: ingrese la contraseña correcta.

solución 1 para el caso 2 : vaya a la configuración de seguridad en el siguiente enlace https://www.google.com/settings/security/lesssecureapps y habilite aplicaciones menos seguras. Para que pueda iniciar sesión desde todas las aplicaciones.

solución 2 para el caso 2 : (consulte https://stackoverflow.com/a/9572958/52277 ) habilite la autenticación de dos factores (también conocida como verificación en dos pasos) y luego genere una contraseña específica de la aplicación. Use esa contraseña recién generada para autenticarse a través de SMTP.

Solución 1 para el caso 3: (Esto puede ser útil) necesita revisar la actividad. pero revisar la actividad no será útil debido a los últimos estándares de seguridad, el enlace no será útil. Así que prueba el siguiente caso.

solución 2 para el caso 3 : si ha alojado su código en algún lugar del servidor de producción y tiene acceso al servidor de producción, tome la conexión de escritorio remoto al servidor de producción e intente iniciar sesión una vez desde el navegador del servidor de producción. Esto agregará excpetioon para iniciar sesión en google y se le permitirá iniciar sesión desde el código.

Pero, ¿qué pasa si no tiene acceso al servidor de producción? prueba la solución 3

Solución 3 para el caso 3: debe habilitar el inicio de sesión desde otra zona horaria / ip para su cuenta de Google.

Para ello, siga el enlace https://g.co/allowaccess y permita el acceso haciendo clic en el botón Continuar.

Y eso es. Aqui tienes. Ahora podrá iniciar sesión desde cualquier computadora y por cualquier medio de aplicación en su cuenta de Google.

Roshan Parmar
fuente
10
Solución 2! Usted pequeña belleza!
George Harnwell
2
lesssecureapps enlace anterior ayudaron :)
Gautam Jain
Wow, esto debe marcarse como respuesta aceptada. Gracias.
Nic
55
el sitio alojado en azul necesita seguir la solución 3 para el caso 3: enlace final que ayuda a g.co/allowaccess
Ravi Anand
1
Solución 2 para el caso 3: funcionó a las mil maravillas. Gracias.
ss_mj
106

Es un problema de seguridad, por defecto, Gmail impide el acceso a su cuenta de correo electrónico desde aplicaciones personalizadas. Puede configurarlo para aceptar el inicio de sesión desde su aplicación.

Después de iniciar sesión en su correo electrónico, HAGA CLIC AQUÍ

Esto te llevará a la siguiente página

Página de aplicaciones menos seguras

Sayka
fuente
1
Además, si tiene un dominio personalizado, los usuarios primero deben ser habilitados por el administrador del dominio para permitir el acceso a aplicaciones menos seguras. Si es administrador de dominio, vaya al siguiente enlace para habilitar este admin.google.com/AdminHome#ServiceSettings/…
user551113
2
Esta respuesta es genial. Funciona a las mil maravillas. Gracias.
Thomas.Benz
24

Después de pasar un par de horas hoy probando todas las soluciones aquí, todavía no pude superar este error exacto. He usado gmail muchas veces de esta manera, así que sabía que era algo tonto, pero nada de lo que hice solucionó el problema. Finalmente me encontré con la solución en mi caso, así que pensé en compartir.

Primero, la mayoría de las respuestas anteriores también son necesarias, pero en mi caso, fue una simple cuestión de ordenar el código al crear la SmtpClientclase.

En este primer fragmento de código a continuación, observe dónde Credentials = credsse encuentra la línea. Esta implementación generará el error al que se hace referencia en esta pregunta, incluso si tiene todo lo demás configurado correctamente.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

Sin embargo, si mueve la llamada de establecimiento de credenciales al final, el correo electrónico se enviará sin error. No hice cambios en el código circundante ... es decir ... el nombre de usuario / contraseña, etc. Claramente, o EnableSSL, UseDefaultCredentials, or the DeliveryMethoddepende de que Credentialsse configure primero ... No probé todo para averiguar cuál era. .

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

Espero que esto ayude a salvar a alguien más de algunos dolores de cabeza en el futuro.

usuario1011627
fuente
2
En mi caso, tuve el mismo problema que el tuyo, reordenando el código para que las credenciales vinieran por última vez para mí.
Dev
1
No puedo creerlo pero funcionó! He habilitado 2 pasos, porque no quería habilitar un indicador menos seguro, pero hasta que puse Credencial al final antes de Enviar, no quería funcionar. ¡Increíble!
Čikić Nenad
66
El problema es que en UseDefaultCredentialssetter existe este código: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;que reemplaza setter credentialspor Credentialssetter. Para mí parece SmtpClientun error
Tomasz Madeyski
@TomaszMadeyski, ¡esto debe ser una respuesta en lugar de un comentario! ese es mi problema ... cómo diablos puedo pensar que si configuro las credenciales en el constructor y luego le asigno un valor falso nuevamente UseDefaultCredentials = false, anula las credenciales ... ¡loco! pero eso sucede ... gracias youuuuu
FabianSilva
12

Hola tuve el mismo problema

Lo que he hecho para resolverlo. es activar la aplicación menos segura. después de conectarme a mi cuenta de gmail. Ingresé a este enlace: https://www.google.com/settings/security/lesssecureapps

Luego enciendo la aplicación segura y funcionó. se ha dicho también arriba

Barak Rosenfeld
fuente
Entonces, ¿cuál es la diferencia que su respuesta para la respuesta anterior ? Se le dará la misma respuesta el 12 de enero de 2015 a las 10:36.
Dush
11

Tengo un código que funciona anteriormente que arroja este error ahora. No hay problema con la contraseña. No es necesario convertir el mensaje a base64 tampoco. Resulta que necesito hacer lo siguiente:

  1. Desactiva la autenticación de 2 factores
  2. Establezca "Permitir aplicaciones menos seguras" en ON
  3. Inicie sesión en su cuenta de Gmail desde el servidor de producción
  4. Vaya aquí también para aprobar la actividad de inicio de sesión
  5. Ejecute su aplicación en el servidor de producción

Código de trabajo

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("[email protected]", "secretpassword"),
            EnableSsl = true
        };

        client.Send("[email protected]", emailTo, subject, body);
    }

Desactivar la autenticación de 2 factores Desactivar la autenticación de 2 factores

Establezca "Permitir aplicaciones menos seguras" en ON (misma página, necesita desplazarse hacia abajo) Permitir aplicaciones menos seguras

Jeson Martajaya
fuente
9

Simplemente siga el paso en el correo electrónico de Google y habilite aplicaciones menos seguras.

Trung
fuente
6

Me he enfrentado al mismo problema. Sucede cuando activa la verificación en dos pasos (MFA). Simplemente apague la verificación en dos pasos y su problema debería resolverse.

Anik
fuente
No tenía habilitados dos pasos para esta cuenta y tuve este problema.
Shiv
4

A continuación se muestra mi código. También tuve el mismo error, pero el problema fue que di mi contraseña incorrecta. El siguiente código funcionará perfectamente ... intente

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

Puedes referirlo en mi blog

Ganesh Pillai N
fuente
Estoy usando el mismo código que funciona en mi máquina local pero no funciona en el servidor. Obteniendo error 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. .
Akshay Chawla
1
Me puse en contacto con mi proveedor de alojamiento y me dijeron: Podríamos ver que ha configurado SMTP de terceros (smtp.gmail.com) que no será compatible con nuestro entorno de servidor compartido. Debido a un abuso excesivo de la función de correo o un problema de spam, la función de correo no es compatible. Puede enviar correos electrónicos utilizando PHPMailer, que es muy popular y de uso frecuente. pero mi sitio está construido en mvc c #, entonces, ¿cómo puedo usar phpmailer?
Akshay Chawla
3

solo active la configuración de o gmail. ver abajo la imagen dada:

ingrese la descripción de la imagen aquí

Rajesh Paliwal
fuente
2

Tuve el mismo problema para una aplicación implementada en Microsoft Azure.

SmtpException: 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.

Primero, aprobé todos los dispositivos desconocidos (algunas direcciones IP originarias de Irlanda) en la siguiente página (iniciada como usuario de gmail): https://security.google.com/settings/u/1/security/secureaccount

Usé la siguiente configuración para el cliente:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password"); 

Comenzó a funcionar solo después de establecer la siguiente propiedad en el cliente smtp:

client.TargetName = "STARTTLS/smtp.gmail.com";
haiiaaa
fuente
2

Lo que funcionó para mí fue activar la opción para aplicaciones menos seguras (estoy usando VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("[email protected]")
        mail.[To].Add("[email protected]")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

Inicie sesión en su cuenta y luego vaya a google.com/settings/security/lesssecureapps

Edgar
fuente
2

Un comentario de Tomasz Madeyski es lo que solucionó mi problema ... él dice que existe un error en SetDefaultCredential, él dice:

"El problema es que en UseDefaultCredentials setter hay este código: this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) nulo; que anula las credenciales establecidas por Creterials setter. Para mí parece un error de SmtpClient

si coloca smtpClient.UseDefaultCredentials = falsedespués de establecer credenciales ... esta línea se establece como nula esas credenciales ...

FabianSilva
fuente
2

NOVIEMBRE 2018, he intentado todo lo anterior sin éxito.

A continuación se muestra la solución que finalmente funcionó. Desafortunadamente no está usando SSL, ¡pero funciona!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
InGeek
fuente
1

Intenté todas las sugerencias que se encuentran aquí, desde habilitar aplicaciones menos seguras hasta probar el puerto 587 ... nada funcionó. Finalmente acabo de comentar la línea UseDefaultCredentials = false. Todo funcionaba si no tocara ese booleano.

Kris Coleman
fuente
1
lo mismo aquí ... no puedo creer que una sola línea me tomó una hora!
Wahid Masud
0

Realmente he analizado muchas ideas, la única solución fue esta (funciona con diferentes proveedores de correo electrónico):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...
Walter
fuente
0

Soy un suscriptor de Google Apps for Business y paso las últimas dos horas lidiando con esto, incluso después de tener todas las configuraciones correctas (smtp, port, enableSSL, etc.). Esto es lo que funcionó para mí y los sitios web que arrojaban el error 5.5.1 al intentar enviar un correo electrónico:

  1. Inicie sesión en su admin.google.com
  2. Haga clic en SEGURIDAD <- si no está visible, haga clic en 'MÁS CONTROLES' y agréguelo de la lista
  3. Haga clic en Configuración básica
  4. Desplácese hasta la parte inferior del cuadro Configuración básica, haga clic en el enlace: 'Ir a configuración para aplicaciones menos seguras'
  5. Seleccione la opción n. ° 3: imponer el acceso a aplicaciones menos seguras para todos los usuarios (no recomendado)
  6. Presione GUARDAR en la parte inferior de la ventana

Después de hacer esto, mis formularios de correo electrónico del sitio web volvieron a funcionar. ¡Buena suerte!

RichieMN
fuente
0

Es posible que deba crear / generar una contraseña de aplicación específica desde gmail. su aplicación o script usará esta nueva contraseña en lugar de su contraseña normal. Su contraseña normal seguirá funcionando bien para usted.

Eso es lo que hizo por mí. Todavía usé la misma cuenta de correo electrónico pero tuve que generar una nueva contraseña específica de la aplicación.

https://support.google.com/accounts/answer/185833?hl=en

Captura de pantalla

Básicamente puedes hacerlo aquí: https://security.google.com/settings/security/apppasswords

samiup
fuente
0

Si estás usando gmail.

  • 1-inicio de sesión en su cuenta

    2- navega por esto enlace

    3- Permitir aplicaciones menos seguras: ON

Disfrutar....

Muhammad Azeem
fuente
0

no ponga el punto de interrupción antes de esperar smtp.SendMailAsync (correo);

:)

cuando espera con un punto de interrupción que da este error cuando elimino el punto de interrupción, ha funcionado

Hamit YILDIRIM
fuente
-1

Utilicé todas las soluciones mencionadas anteriormente, pero finalmente funcionó solo después de habilitar el acceso IMAP desde la configuración de Gmail Enlace para habilitar el acceso IMAP en la configuración de gmail

Por supuesto, también se requerían los puntos en las otras soluciones.

AndroidMechanic - Viral Patel
fuente
Esto no me ayudó. Activar IMAP solo le permite leer mensajes de correo electrónico de Gmail de otros clientes de correo como Outlook, Thunderbird.
kimbaudi
-5

intente cambiar el host, este es el nuevo, obtuve esta configuración de Mozilla Thunderbird

Host = "smtp.googlemail.com"

ese trabajo para mi

patogalarzar
fuente