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

110

Je souhaite envoyer un e-mail depuis mon application et j'ai écrit le code suivant pour l'envoi de mail

    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 alors quelle erreur je fais pour l'envoyer.

Quand j'envoie le bouton, cela donne une erreur comme

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

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="[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>

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

Abhay Andhariya
la source
duplication possible de l' envoi d'e-mails en .NET via Gmail
Roman R.
Je pense que vous devrez peut-être aussi regarder cette réponse: stackoverflow.com/a/9572958/1136253
mrbengi
J'ai eu le même problème. vérifiez [ce message] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady
Vous devriez envisager de spécifier les données de configuration SMTP dans le fichier de configuration et de ne pas les écraser dans un code - voir les données de configuration SMTP sur systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Réponses:

62

Vérifiez d'abord les problèmes de sécurité liés à 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 de tels cas, vérifiez l'autre réponse de @mjb comme ci-dessous

Voici la chose très générale que je vérifie toujours en premier pour de tels problèmes

client.UseDefaultCredentials = true;

réglez-le sur false.

Notez la réponse de @Joe King - vous devez définir client.UseDefaultCredentials avant de définir client.

Ronak Patel
la source
2
Dans ce cas, vous devez partager votre code. La réponse ci-dessus est pour le code en question
Ronak Patel
7
Notez la réponse de @Joe King - vous devez définir client.UseDefaultCredentials avant de définir client.Credentials
Aaron
1
Cette réponse ne fonctionnera pas, je pense que la plupart des gens ont dû faire face à la sécurité du côté gmail. voir la réponse de mjb pour une solution appropriée
Jerry Liang
2
Assurez-vous également que le "Captcha" est désactivé - cela peut être nécessaire si vous exécutez le script sur un serveur distant (pas nécessaire lors de l'exécution sur une machine locale): accounts.google.com/DisplayUnlockCaptcha
Jens
3
Réglage client.UseDefaultCredentials = false; avant client.Credentials et réglage client.EnableSsl = true; a fait l'affaire dans mon cas.
Empilé le
140

J'ai le même problème.

J'ai trouvé cette solution:

Google peut bloquer les tentatives de connexion de certaines applications ou appareils qui n'utilisent pas les normes de sécurité modernes. Étant donné que ces applications et appareils sont plus faciles à pénétrer, leur blocage permet de sécuriser 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 précédant la version 8.1
  • Certains clients de messagerie de bureau comme Microsoft Outlook et Mozilla Thunderbird

Par conséquent, vous devez activer la connexion moins sécurisée (ou l' accès aux applications moins sécurisé ) dans votre compte Google.

Après vous être connecté au compte Google, accédez à:

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

En C #, vous pouvez utiliser le code suivant:

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

-------------------
Informations partagées par Michael Freidgeim dans la zone de commentaires ci-dessous:
Réponse similaire avec captures d'écran https://stackoverflow.com/a/32457468/52277

mjb
la source
1
Cela, en plus de s'assurer que SSL était activé dans le code, a fait des merveilles, merci beaucoup
Crouch
1
Merci @mjb pour avoir partagé la réponse. Ça me sauve la vie :)
Mayeed
3
cela devrait être la réponse sélectionnée
thatOneGuy
2
C'était mon problème, merci d'avoir traversé le problème et d'avoir donné une réponse plus explicative.
Bojan
A travaillé pour moi aussi. Merci @mjb
Rajbir Jawanda
44

Assurez-vous de régler SmtpClient.Credentials après avoir appelé SmtpClient.UseDefaultCredentials = false.

L'ordre est important car le paramètre SmtpClient.UseDefaultCredentials = falsesera réinitialisé SmtpClient.Credentialsà null.

Joe King
la source
2
Cela fait une demi-heure que je cherche la solution à cela, le vôtre est le seul petit message sur Internet que j'ai trouvé qui mentionne la commande de celui-ci. Merci mon pote.
4
@Joe King Vous êtes juste génial mec ..... recherchait cela depuis 3 heures :)
Jatin
1
Merci @Joe King pour les informations vitales manquantes dans les documents MS. C'était la solution à mon problème d'envoi avec nom d'utilisateur et mot de passe également.
Aaron
1
Ceci est facilement négligé, mais la commande est importante comme je viens de le découvrir.
GatesReign
1
Ouais. m'a sauvé la journée. vous devez appeler UseDefaultCredentials = false avant de définir les informations d'identification.
Rendel le
33

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. Utiliser à la smtp.gmail.complace desmtp.google.com
  2. Utilisez le port 587
  3. Définir client.UseDefaultCredentials = false;avant de définir les informations d'identification
  4. Activez l' accès pour les applications moins sécurisées
  5. Ensemble client.EnableSsl = true;

Si ces étapes n'ont pas aidé, vérifiez cette réponse .
Vous pouvez peut-être trouver quelque chose d'utile sur cette FAQ System.Net.Mail .

Empilé
la source
1
Cette réponse est très utile ... a résolu mon problème. Merci beaucoup
Hari
1
si cela ne fonctionne toujours pas, allez sur ce lien g.co/allowaccess et autorisez l'accès
Portekoi
1
"L'accès aux applications moins sécurisées" m'a sauvé la journée.
Romil Kumar Jain
1
Cette partie l'a fait pour moi: "Activez l'accès pour les applications moins sécurisées". Merci!
Tadej
11

Essayez de vous connecter à votre compte Gmail. il se verrouille si vous envoyez des e-mails en utilisant gmail SMTP. Je ne connais pas la limite d'e-mails que vous pouvez envoyer avant qu'il ne soit verrouillé, mais si vous vous connectez une fois, cela fonctionne à nouveau à partir du code. assurez-vous que vos paramètres webconfig sont bons.

Shuchita Bora
la source
Meilleure réponse en effet! Je me suis reconnecté et cela a fonctionné! PS: j'ai dû fournir un captcha sur Google
Bellash
J'ai eu cette erreur car mon compte Google est protégé par une authentification à deux facteurs. J'ai fini par créer un compte dédié à partir duquel envoyer l'e-mail.
MvdD
8

Essayez-le de cette façon, je viens de faire quelques changements légers:

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

Veuillez également montrer votre fichier app.config, si vous y avez des paramètres de messagerie.

meda
la source
Je ne l'ai pas encore configuré. que dois-je y écrire?
Abhay Andhariya
il n'y a pas de fichier app.config dans mon application mvc.
Abhay Andhariya
J'ai essayé de nombreuses autres solutions, mais seule celle-ci a fonctionné. Merci
Adil Malik
3

J'ai rencontré le même problème même si j'ai défini "UseDefaultCredentials" sur false. Plus tard, j'ai découvert que la cause principale était que j'avais activé la "vérification en deux étapes" dans mon compte. Après l'avoir éteint, le problème a disparu.

Soros Liu
la source
4
Ne désactivez pas la vérification en deux étapes. C'est là pour une raison. Vous pouvez générer un mot de passe spécifique à l'application dans les paramètres de GMail et l'utiliser dans SmtpClient. Vous devriez le faire indépendamment plutôt que d'exposer un mot de passe normal.
Daniel Dyson
3

Activez l'application moins sécurisée à partir de ce lien et boum ...

Behzad Qureshi
la source
Cela a fonctionné pour moi .. Cela doit être la réponse acceptée
Noman
2

entrez la description de l'image ici Assurez-vous que l'accès à l'application moins sécurisée est autorisé.

        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
la source
1
Le lien pour basculer le paramètre pour "Accéder à une application moins sécurisée" est ici - google.com/settings/security/lesssecureapps La modification du paramètre ne m'a pas aidé à surmonter l'erreur
mvark
1

Voici mon code.J'ai également eu la même erreur, mais le problème était que j'ai mal donné mon mot de passe.Le code ci-dessous fonctionnera parfaitement ...

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

Vous pouvez le renvoyer dans Envoi de courrier

Ganesh Pillai N
la source
1

S'il s'agit d'un nouveau compte Google, vous devez envoyer un e-mail (le premier) via l'interface utilisateur habituelle. Après cela, vous pouvez utiliser votre application / robot pour envoyer des messages.

Ezequiel Santana
la source
1

Vous devriez envisager de spécifier les données de configuration SMTP dans le fichier de configuration et de ne pas les écraser dans un code - voir les données de configuration SMTP à 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
la source
1

J'ai rencontré le même problème plusieurs fois. Après avoir activé l'option d'application moins sécurisée, le problème a été résolu. Activez l'application moins sécurisée à partir d'ici: https://myaccount.google.com/lesssecureapps

espérons que cela aidera.

Mahmud
la source
1

Si vous êtes dans un environnement de test et que vous ne souhaitez pas définir de paramètres de sécurité, vous devez autoriser les applications moins sécurisées via. ce lien dans Gmail.

https://myaccount.google.com/lesssecureapps

Fahad S. Ali
la source
0

certains serveurs smtp (sécurisés) vous obligent à fournir à la fois un nom d'utilisateur et une adresse e-mail.Si son gmail, il y a de fortes chances que ce soit le problème de `` connexion moins sécurisée '' que vous devez résoudre, sinon vous pouvez essayer:

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

notez que l'e-mail de et le nom d'utilisateur sont différents contrairement à certaines implémentations qui les désignent comme identiques.

appeler cette méthode peut être fait comme ceci:

SendEmail("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);
Manoir Yakir
la source
0

Après avoir activé l'option moins sécurisée et essayé d'autres solutions, si vous rencontrez toujours le même problème, essayez d'utiliser cette surcharge:

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

au lieu de:

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

J'ai créé un abonnement Microsoft 365 Developer (E5) aujourd'hui matin et l' ai utilisé pour envoyer un e-mail de test en utilisant les paramètres suivants

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

Cela n'a pas fonctionné au début, car je continuais à recevoir ce message d'erreur avec l'exception levée par ce code. Ensuite, j'ai passé environ 4 heures et plus à jouer avec les paramètres du centre d'administration Microsoft 365 et à lire des articles pour résoudre le problème. En fin de compte, j'ai changé le mot de passe de mon centre d'administration Microsoft 365 et cela a fonctionné comme un charme. Il vaut donc la peine d'essayer de changer le mot de passe lorsque vous recevez ce message, avant de penser à une solution avancée.

Notez que le mot de passe n'était pas invalide à coup sûr car je me suis connecté à mon compte Microsoft 365 sans aucun problème. cependant, le changement de mot de passe a résolu le problème.

Kushan Randima
la source
-1

J'étais également confronté à un problème du type «Le serveur SMTP nécessite une connexion sécurisée ou le client n'a pas été authentifié. La réponse du serveur a été: 5.5.0 Authentification requise 'a ensuite parcouru tellement de documents Internet, mais cela ne m'a pas pleinement aidé. Comment je l'ai résolu comme

step1: smtp.gmail.com est un serveur gmail, alors accédez aux paramètres de votre compte gmail-> cliquez sur voir tous les paramètres-> Transfert et IMAP / POP-> vérifiez que pop et imap est activé, sinon activez-le-> Enregistrer les modifications. étape2-cliquez sur votre photo de profil gmail-> cliquez sur Gérer votre compte google-> allez dans l'onglet sécurité-> vérifiez l'accès aux applications moins sécurisées (cette option sera disponible si vous n'avez pas opter pour la vérification en deux étapes) -> par défaut google le définira comme désactivé, lui permettra d'utiliser votre vrai mot de passe gmail pour l'envoi d'e-mails. Remarque: -Activer l'accès gmail pour les applications moins sécurisées peut être dangereux pour vous, je ne le recommande donc pas

étape 3: -si votre compte a activé la vérification en deux étapes ou si vous souhaitez utiliser un mot de passe autre que votre mot de passe gmail réel en utilisant le mot de passe spécifique à l'application, essayez ceci: - cliquez sur votre photo de profil gmail-> cliquez sur Gérer votre compte google-> allez à la sécurité tab-> recherchez APP PASSWORD-> sélectionnez n'importe quel nom d'application donné-> sélectionnez n'importe quel nom d'appareil-> cliquez sur générer-> copiez le mot de passe à 16 chiffres et collez-le dans votre application où vous devez entrer un mot de passe gmail à la place de votre vrai mot de passe Gmail.

Suryakant_Dubalgunde
la source