166 votes

Le serveur SMTP exige une connexion sécurisée ou le client n'a pas été authentifié. La réponse du serveur était : 5.5.1 Authentification requise ?

Je veux envoyer un email depuis mon application et j'ai écrit le code suivant pour envoyer un email

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

Je l'exécute sur localhost donc quelle erreur je fais pour l'envoyer.

Quand j'envoie le bouton, il y a une erreur comme

Le serveur SMTP exige une connexion sécurisée ou le client n'a pas été authentifié. La réponse du serveur était : 5.5.1 Authentification Requis.

Code dans le fichier 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="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

que dois-je faire pour résoudre cette erreur et envoyer le courrier ?

228voto

mjb Points 644

J'ai le même problème.

J'ai trouvé cette solution :

Google peut bloquer les tentatives de connexion à partir de certaines applications ou appareils qui n'utilisent pas les normes de sécurité modernes. Ces applications et appareils étant plus faciles à pirater, leur blocage contribue à la sécurité de votre compte.

Voici quelques exemples d'applications qui ne prennent pas en charge les dernières normes de sécurité :

  • L'application Mail sur votre iPhone ou iPad avec iOS 6 ou inférieur

  • L'application Mail sur votre téléphone Windows avant la version 8.1

  • Certains clients de messagerie de bureau comme Microsoft Outlook et Mozilla Thunderbird.

Par conséquent, vous devez activer Connexion moins sécurisée (ou Accès aux applications moins sécurisé ) dans votre compte Google.

Après vous être connecté à votre compte Google, allez à :

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

En C#, vous pouvez utiliser le code suivant :

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    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@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

87voto

Patel Points 1058

Vérifiez d'abord les problèmes de sécurité de Gmail. Vous avez peut-être activé la double authentification dans gmail. Vérifiez également votre boîte de réception gmail si vous recevez des alertes de sécurité. Dans ce cas, vérifiez les autres réponses de @mjb comme ci-dessous

Voici la chose très générale que je vérifie toujours en premier pour de telles questions

client.UseDefaultCredentials = true;

le mettre à faux.

Note @Joe King's réponse - vous devez définir client.UseDefaultCredentials avant vous définissez client.Credentials

60voto

Joe King Points 924

Assurez-vous de définir SmtpClient.Credentials après en appelant SmtpClient.UseDefaultCredentials = false .

L'ordre est important car il fixe SmtpClient.UseDefaultCredentials = false réinitialisera SmtpClient.Credentials à zéro.

50voto

Stacked Points 501

J'ai cherché et essayé différentes choses pendant des heures Pour résumer, j'ai dû prendre en considération les points suivants :

  1. Utilisez smtp.gmail.com au lieu de smtp.google.com
  2. Utiliser le port 587
  3. Set client.UseDefaultCredentials = false; avant de définir les informations d'identification
  4. Allumez le Accès aux applications moins sécurisées
  5. Set client.EnableSsl = true;

Si ces étapes n'ont pas aidé, vérifiez ceci réponse .
Peut-être que vous pouvez trouver quelque chose d'utile sur ce site FAQ System.Net.Mail aussi.

29voto

Roman O Points 312

App Passwords m'a aidé.

  1. Aller à https://myaccount.google.com/security .
  2. Faites défiler la page jusqu'à "Se connecter à Google".
  3. Activez la vérification en deux étapes.
  4. Ajouter le mot de passe de l'application.
  5. Utilisez le mot de passe généré dans votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X