web-dev-qa-db-fra.com

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

Je veux envoyer un email à partir de mon application et j'ai écrit le code suivant pour l'envoi de courrier

    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 un bouton cela donne une erreur comme

Le serveur SMTP nécessite une connexion sécurisée ou le client ne l'était pas authentifié. La réponse du serveur était la suivante: 5.5.1 Authentification Champs obligatoires.

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 un mail?

68
Abhay Andhariya

Commencez par vérifier les problèmes liés à la 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 de tels cas, vérifiez l’autre réponse de @mjb comme ci-dessous

Ci-dessous, la chose très générale que je vérifie toujours d'abord pour de tels problèmes

client.UseDefaultCredentials = true;

définissez-le sur false.

Remarque @Joe King answer - vous devez définir client.UseDefaultCredentials avant vous définissez client.Credentials

36
Ronak Patel

J'ai le même problème.

J'ai trouvé cette solution:

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

Par conséquent, vous devez activer Connexion moins sécurisée dans votre compte google.

Une fois connecté à votre compte Google, accédez à:

https://www.google.com/settings/security/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 des commentaires ci-dessous:
Réponse similaire avec des screenshots https://stackoverflow.com/a/32457468/52277

86
mjb

Assurez-vous de définir SmtpClient.Credentials after appelez SmtpClient.UseDefaultCredentials = false

L'ordre est important car le réglage de SmtpClient.UseDefaultCredentials = false réinitialisera SmtpClient.Credentials en null.

31
Joe King

J'ai cherché et essayé différentes choses pendant des heures. Pour résumer, je devais prendre en compte les points suivants:

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

Si ces étapes ne vous ont pas aidé, cochez cette réponse .
Peut-être trouverez-vous quelque chose d’utile sur ce System.Net.Mail FAQ aussi.

16
Stacked

Essayez de vous connecter à votre compte Gmail. il est verrouillé si vous envoyez des courriels à l’aide de gmail SMTP. Je ne connais pas la limite d'e-mails que vous pouvez envoyer avant qu'elle ne soit verrouillée, mais si vous vous connectez une fois, cela fonctionnera à nouveau à partir du code.

8
Shuchita Bora

Essayez de cette façon, je viens de faire quelques changements de lumière:

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 afficher votre fichier app.config, si vous avez des paramètres de messagerie.

7
meda

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 que je l'ai éteint, le problème est parti.

3
Soros Liu

enter image description here 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;
        }
2

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

1
user1913909

Ci-dessous est mon code.J'ai également eu la même erreur, mais le problème était que j'ai donné mon mot de passe faux.

            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 signaler dans Envoi de courrier

1
Ganesh Pillai N

Activez l'application moins sécurisée depuis link et boum ...

1
Behzad Qureshi

Vous devez 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 Données de configuration SMTP à l'adresse 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>
1
Michael Freidgeim

certains serveurs smtp (ceux qui sont sécurisés) vous obligent à fournir le nom d'utilisateur et l'adresse e-mail. Si son adresse gmail est la plupart des chances qu'il s'agisse du problème de connexion moins sécurisée que vous devez résoudre, 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);
}

remarquez que l'email de et le nom d'utilisateur sont différents, contrairement à certaines implémentations qui les désignent comme identiques. 

appeler cette méthode peut se faire comme suit:

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

essayez d’autoriser l’accès aux applications moins sécurisées.

Ici, vous pouvez activer une application moins sécurisée après la connexion avec votre compte Gmail.

https://myaccount.google.com/lesssecureapps

Merci.

0
RaviTeja V

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");
0
DeveloperX