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 ?

1voto

Mahmud Points 181

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

J'espère que cela vous aidera.

1voto

Kushan Randima Points 688

J'ai créé un Abonnement Microsoft 365 Developer (E5) aujourd'hui matin et je 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 j'obtenais toujours ce message d'erreur avec l'exception déclenchée par ce code. J'ai ensuite passé plus de quatre heures à jouer avec les paramètres du centre d'administration de Microsoft 365 et à lire des articles pour résoudre le problème. Finalement, j'ai changé le mot de passe du centre d'administration de Microsoft 365 et cela a marché comme sur des roulettes. Donc, il vaut 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, 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.

1voto

José Lugo Points 91

Après avoir passé en revue toutes les solutions proposées, je me suis rendu compte que la réponse correcte dépendait de la situation actuelle de votre serveur et de votre client de messagerie. Dans mon cas, l'enregistrement MX pointe vers mon serveur de sortie sur site. De plus, comme j'utilise G Suite et non Gmail pour envoyer mes e-mails de notification, j'ai dû suivre cette configuration : https://support.google.com/a/answer/2956491?hl=en .

Ceci dit, j'ai trouvé que la bonne façon de faire fonctionner ce service est de configurer d'abord le service de relais SMTP à partir de mon compte G Suite :

SMTP_Relay Configuration GSuite

Relay Settings Details

L'adresse IPv6 est l'adresse du serveur web vers lequel l'enregistrement MX pointe (exemple : 1234:454:c88a:d8e7:25c0:2a9a:5aa2:104).

Une fois que cela est fait, utilisez ce code pour compléter la solution :

 //Set email provider credentials
 SmtpClient smtpClient = new SmtpClient("smtp-relay.gmail.com", "587");                   

 smtpClient.EnableSsl = true;
 smtpClient.UseDefaultCredentials = true;

 MailAddress from = new MailAddress("username@yourdomain.com", "EmailFromAlias");
 MailAddress to = new MailAddress("destination@anydomain.com");

 MailMessage = new MailMessage(from, to);

 MailMessage.Subject = subject;
 MyMailMessage.Body = message;

 MyMailMessage.IsBodyHtml = false;

 smtpClient.Send(MyMailMessage);

Veuillez noter qu'avec cette méthode, smtpClient.UseDefaultCredentials = true ; et non faux comme suggéré dans d'autres solutions. De plus, puisque nous utilisons l'adresse IPv6 pour nous connecter au client SMTP, il n'est pas nécessaire de spécifier le nom d'utilisateur ou le mot de passe. Par conséquent, à mon avis, il s'agit d'une approche plus sûre et plus sécurisée.

0voto

Yakir Manor Points 1725

Certains serveurs smtp (sécurisés) vous demandent de fournir à la fois le nom d'utilisateur et l'email, si c'est gmail, il y a de fortes chances que ce soit le problème de 'Less Secure Sign-In' que vous deviez 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'email de et le nom d'utilisateur sont différents, contrairement à certaines implémentations qui les considèrent comme identiques.

L'appel de cette méthode peut se faire comme suit :

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0voto

Fahad S. Ali Points 422

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ûres via ce lien dans Gmail.

https://myaccount.google.com/lesssecureapps

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