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?

110

Quiero enviar un correo electrónico desde mi aplicación y he escrito el siguiente código para enviar correo

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

Lo estoy ejecutando en localhost, así que, ¿qué error estoy cometiendo al enviarlo?

Cuando envío el botón, aparece 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.

Código en archivo Web.config

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="[email protected]" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="[email protected]" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

¿Qué debo hacer para solucionar este error y enviar correo?

Abhay Andhariya
fuente
Creo que es posible que también tengas que mirar esta respuesta: stackoverflow.com/a/9572958/1136253
mrbengi
Yo tuve el mismo problema. consulte [esta publicación] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady
Debe considerar especificar los datos de configuración de SMTP en el archivo de configuración y no sobrescribirlos en un código; consulte los datos de configuración de SMTP en systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Respuestas:

62

Primero verifique los problemas relacionados con la seguridad de Gmail. Es posible que haya habilitado la doble autenticación en gmail. También revise su bandeja de entrada de Gmail si recibe alguna alerta de seguridad. En tales casos, verifique otra respuesta de @mjb como se muestra a continuación

A continuación se muestra lo muy general que siempre verifico primero para tales problemas

client.UseDefaultCredentials = true;

configúrelo en falso.

Tenga en cuenta la respuesta de @Joe King : debe configurar client.UseDefaultCredentials antes de configurar client.Credentials

Ronak Patel
fuente
2
En ese caso, debe compartir su código. La respuesta anterior es para el código en cuestión
Ronak Patel
7
Tenga en cuenta la respuesta de @Joe King: debe configurar client.UseDefaultCredentials antes de configurar client.Credentials
Aaron
1
Esta respuesta no funcionará, creo que la mayoría de las personas se enfrentaron a la seguridad en el lado de Gmail. vea la respuesta de mjb para una solución adecuada
Jerry Liang
2
Además, asegúrese de que "Captcha" esté deshabilitado; 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
3
Configurando client.UseDefaultCredentials = false; antes de client.Credentials y configuración client.EnableSsl = true; hizo el truco en mi caso.
Apilado el
139

Tengo el mismo problema.

He encontrado esta solución:

Google puede bloquear los intentos de inicio de sesión de algunas aplicaciones o dispositivos que no utilizan los estándares de seguridad modernos. Dado que estas aplicaciones y dispositivos son más fáciles de ingresar, bloquearlos ayuda a mantener su cuenta más segura.

Algunos ejemplos de aplicaciones que no son compatibles con los últimos estándares de seguridad incluyen:

  • La aplicación Mail en su iPhone o iPad con iOS 6 o inferior
  • La aplicación de correo en su teléfono con Windows anterior a la versión 8.1
  • Algunos clientes de correo de escritorio como Microsoft Outlook y Mozilla Thunderbird

Por lo tanto, debe habilitar el inicio de sesión menos seguro (o el acceso a la aplicación menos segura ) en su cuenta de Google.

Después de iniciar sesión en la cuenta de Google, vaya a:

https://www.google.com/settings/security/lesssecureapps
o
https://myaccount.google.com/lesssecureapps

En C #, puede usar el siguiente código:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("[email protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Información compartida por Michael Freidgeim en el área de comentarios a continuación:
respuesta similar con capturas de pantalla https://stackoverflow.com/a/32457468/52277

mjb
fuente
1
Esto, junto con garantizar que SSL estaba habilitado en el código, ha funcionado de maravilla, muchas gracias
Crouch
1
Gracias @mjb por compartir la respuesta. Me salva la vida :)
Mayeed
3
esta debería ser la respuesta seleccionada
thatOneGuy
2
Este fue mi problema, gracias por pasar por el problema y dar una respuesta más explicativa.
Bojan
Me funcionó a mi también. Gracias @mjb
Rajbir Jawanda
44

Asegúrese de configurar SmtpClient.Credentials después de llamar SmtpClient.UseDefaultCredentials = false.

El orden es importante ya que la configuración SmtpClient.UseDefaultCredentials = falsese restablecerá SmtpClient.Credentialsa nula.

Joe King
fuente
2
He estado buscando la solución a esto durante media hora, la suya es la única pequeña publicación en Internet que he encontrado que menciona el pedido de esto. Gracias amigo.
4
@Joe King Eres simplemente un compañero increíble ... buscaba esto desde hace 3 horas :)
Jatin
1
Gracias @Joe King, es información vital que falta en los documentos de MS. Esta fue la solución a mi problema de envío con nombre de usuario y contraseña también.
Aaron
1
Esto se pasa por alto fácilmente, pero el pedido es importante, como acabo de descubrir.
GatesReign
1
Si. salvó mi día. debe llamar a UseDefaultCredentials = false antes de configurar Credentials.
Rendel
33

He buscado y probado diferentes cosas durante horas. En resumen, tuve que tener en cuenta los siguientes puntos:

  1. Usar en smtp.gmail.comlugar desmtp.google.com
  2. Utilice el puerto 587
  3. Establecer client.UseDefaultCredentials = false;antes de establecer credenciales
  4. Active el acceso para aplicaciones menos seguras
  5. Conjunto client.EnableSsl = true;

Si estos pasos no le ayudaron, marque esta respuesta .
Quizás, también pueda encontrar algo útil en estas Preguntas frecuentes de System.Net.Mail .

Apilado
fuente
1
Esta respuesta es muy útil ... resolvió mi problema. Muchas gracias
Hari
1
si todavía no funciona, vaya a este enlace g.co/allowaccess y permita el acceso
Portekoi
1
"Acceso para aplicaciones menos seguras" me salvó el día.
Romil Kumar Jain
1
Esta parte lo hizo por mí: "Active el acceso para aplicaciones menos seguras". ¡Gracias!
Tadej
11

Intente iniciar sesión en su cuenta de gmail. se bloquea si envía correos electrónicos utilizando Gmail SMTP. No sé el límite de correos electrónicos que puede enviar antes de que se bloquee, pero si inicia sesión una vez, volverá a funcionar desde el código. asegúrese de que su configuración webconfig sea buena.

Shuchita Bora
fuente
¡La mejor respuesta en verdad! ¡Me conecté de nuevo y funcionó! PD: tuve que proporcionar un captcha en Google
Bellash
Recibí este error porque mi cuenta de Google está protegida con autenticación de dos factores. Terminé creando una cuenta dedicada para enviar el correo electrónico.
MvdD
8

Pruébelo de esta manera, acabo de hacer algunos cambios de luz:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("[email protected]", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

También muestre su archivo app.config, si tiene configuraciones de correo allí.

meda
fuente
Aún no lo he configurado en él. ¿Qué debo escribir allí?
Abhay Andhariya
no hay ningún archivo app.config en mi aplicación mvc.
Abhay Andhariya
Probé muchas otras soluciones, pero solo esta funcionó. Gracias
Adil Malik
3

Encontré el mismo problema incluso si configuré "UseDefaultCredentials" en falso. Más tarde descubrí que la causa principal es que activé la "Verificación en 2 pasos" en mi cuenta. Después de apagarlo, el problema desapareció.

Soros Liu
fuente
4
No desactive la verificación en dos pasos. Está ahí por una razón. Puede generar una contraseña específica de la aplicación en la configuración de GMail y usarla en SmtpClient. Debería hacerlo independientemente en lugar de exponer una contraseña normal.
Daniel Dyson
3

Active la aplicación menos segura desde este enlace y boom ...

Behzad Qureshi
fuente
Esto funcionó para mí .. Esta debe ser la respuesta aceptada
Nadie
2

ingrese la descripción de la imagen aquí Asegúrese de que se permita el acceso a la aplicación menos segura.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("[email protected]");
        mail.Sender = new MailAddress("[email protected]");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }
Shivam Srivastava
fuente
1
El enlace para alternar la configuración de "Acceder a aplicaciones menos seguras" está aquí: google.com/settings/security/lesssecureapps Cambiar la configuración no me ayudó a superar el error
mvark
1

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 código siguiente funcionará perfectamente ... inténtelo

            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);

Puede remitirlo en Envío de correo

Ganesh Pillai N
fuente
1

Si se trata de una nueva cuenta de Google, debe enviar un correo electrónico (el primero) a través de la interfaz de usuario habitual. Después de eso, puede usar su aplicación / robot para enviar mensajes.

Ezequiel Santana
fuente
1

Debe considerar especificar los datos de configuración de SMTP en el archivo de configuración y no sobrescribirlos en un código; consulte los datos de configuración de SMTP en http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="[email protected]">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>
Michael Freidgeim
fuente
1

Me he encontrado con el mismo problema varias veces. Después de habilitar la opción de aplicación menos segura, el problema se resolvió. Habilite la aplicación menos segura desde aquí: https://myaccount.google.com/lesssecureapps

espero que esto ayude.

Mahmud
fuente
0

algunos servidores smtp (seguros) requieren que proporcione tanto el nombre de usuario como el correo electrónico, si es gmail, lo más probable es que sea el problema de 'Inicio de sesión menos seguro' que debe abordar, de lo contrario, puede intentar:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

observe que el correo electrónico de y el nombre de usuario son diferentes a diferencia de algunas implementaciones que se refieren a ellos como lo mismo.

llamar a este método se puede hacer así:

SendEmail("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);
Mansión Yakir
fuente
0

Después de activar la opción menos segura y probar otras soluciones, si aún tiene el mismo problema, intente utilizar esta sobrecarga:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

en vez de:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
ssmsexe
fuente
0

Creé una suscripción de desarrollador de Microsoft 365 (E5) hoy por la mañana y la usé para enviar un correo electrónico de prueba con la siguiente configuración

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

No funcionó al principio, ya que seguía recibiendo este mensaje de error con la excepción lanzada por este código. Luego, pasé más de 4 horas jugando con la configuración del centro de administración de Microsoft 365 y leyendo artículos para resolver el problema. Al final, cambié mi contraseña del centro de administración de Microsoft 365 y funcionó a la perfección. Por lo tanto, vale la pena intentar cambiar la contraseña cuando reciba este mensaje, antes de pensar en cualquier solución avanzada.

Tenga en cuenta que la contraseña no era válida con seguridad ya que inicié sesión en mi cuenta de Microsoft 365 sin ningún problema. sin embargo, el cambio de contraseña resolvió el problema.

Kushan Randima
fuente
-1

También me enfrentaba a un problema como 'El servidor SMTP requiere una conexión segura o el cliente no estaba autenticado. La respuesta del servidor fue: 5.5.0 Se requiere autenticación 'y luego revisé muchos materiales de Internet, pero no me ayudó del todo. Cómo lo resolví como

paso 1: smtp.gmail.com es el servidor de gmail, así que vaya a la configuración de gmail de su cuenta-> haga clic en ver todas las configuraciones-> Reenvío e IMAP / POP-> marque pop e imap está habilitado, si no lo habilita-> Guardar cambios. paso2-haga clic en su imagen de perfil de Gmail-> haga clic en Administrar su cuenta de Google-> vaya a la pestaña de seguridad-> verifique Acceso a aplicaciones menos seguras (esta opción estará disponible si no ha optado por la verificación en dos pasos) -> por defecto Google lo establecerá como deshabilitado, lo habilitará para usar su contraseña de gmail real para enviar correo electrónico. nota: -Habilitar el acceso a Gmail para aplicaciones menos seguras puede ser peligroso para usted, así que no lo recomiendo

paso 3: -si su cuenta tiene habilitada la verificación en dos pasos o desea usar una contraseña que no sea su contraseña real de gmail usando la contraseña específica de la aplicación, intente esto: - haga clic en su imagen de perfil de gmail-> haga clic en Administrar su cuenta de Google-> vaya a seguridad pestaña-> busque APP PASSWORD-> seleccione cualquier nombre de aplicación dado-> seleccione cualquier nombre de dispositivo-> haga clic en generar-> copie la contraseña de 16 dígitos y péguela en su aplicación donde debe ingresar una contraseña de gmail en lugar de tu contraseña de gmail real.

Suryakant_Dubalgunde
fuente