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


260

J'utilise le code suivant pour envoyer un e-mail. Le code fonctionne correctement sur ma machine locale. Mais sur le serveur de production, je reçois le message d'erreur

var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

Et sur mon Gmail A / c, j'ai reçu l'e-mail suivant après avoir exécuté le code du serveur de production

Salut ,

Quelqu'un a récemment utilisé votre mot de passe pour essayer de se connecter à votre compte Google mymailid@gmail.com. Cette personne utilisait une application telle qu'un e-mail, un client ou un appareil mobile.

Nous avons empêché la tentative de connexion au cas où un pirate de l'air tenterait d'accéder à votre compte. Veuillez consulter les détails de la tentative de connexion:

Vendredi 3 janvier 2014 13:56:08 heures UTC Adresse IP: xxx.xx.xx.xxx (abcd.net.) Lieu: Philadelphia PA, Philadelphia, PA, USA

Si vous ne reconnaissez pas cette tentative de connexion, quelqu'un d'autre peut essayer d'accéder à votre compte. Vous devez vous connecter à votre compte et réinitialiser votre mot de passe immédiatement.

Réinitialiser le mot de passe

S'il s'agit de vous et que vous rencontrez des difficultés pour accéder à votre compte, suivez les étapes de dépannage répertoriées sur http://support.google.com/mail?p=client_login.

Cordialement, L'équipe des comptes Google


avez-vous accès au serveur de production
Arshad

Je n'ai pas accès au serveur de production
vcs

Désactivez la vérification en deux étapes ..
Mangesh


1
Assurez-vous également que Google "Captcha" est désactivé - cela peut être nécessaire si vous exécutez le script sur un serveur distant (non nécessaire lors de l'exécution sur une machine locale): accounts.google.com/DisplayUnlockCaptcha
Jens

Réponses:


197

Cela se produit généralement lorsque vous essayez de vous connecter à partir d'un fuseau horaire ou d'un ordinateur à adresse IP différents. Votre serveur de production et l'identifiant de messagerie que vous avez utilisé tous les deux se trouvent dans un fuseau horaire différent. Choisissez l'une de ces deux solutions:

1) Connectez-vous au serveur de production via un accès à distance et connectez-vous à gmail une fois avec vos informations d'identification. Ils demanderont la confirmation, la confirmeront et se déconnecteront.

Ou 2) connectez-vous à gmail à votre ordinateur local, suivez ce lien et choisissez d' examiner cette activité et de prendre les mesures appropriées.


21
Un petit commentaire: accédez à security.google.com/settings/security/activity et ici vous verrez une connexion bloquée à partir de votre code. Permettez-leur et cela devrait aider dans ce cas.
Alex Zhukovskiy

68
Cela aidera également beaucoup: google.com/settings/security/lesssecureapps
George

Oui, la raison est que la vérification en 2 étapes est activée pour le compte Gmail. Sélectionnez App / Device et cliquez sur le bouton Generate support.google.com/accounts/answer/185833
smily


8
Assurez-vous également que Google "Captcha" est désactivé - cela peut être nécessaire si vous exécutez le script sur un serveur distant (non nécessaire lors de l'exécution sur une machine locale): accounts.google.com/DisplayUnlockCaptcha
Jens

301

Lorsque vous essayez d'envoyer du courrier à partir du code et que vous trouvez l'erreur «Le serveur SMTP nécessite une connexion sécurisée ou le client n'a pas été authentifié. La réponse du serveur était: 5.5.1 Authentification requise», que l'erreur peut se produire en raison des cas suivants.

cas 1: lorsque le mot de passe est incorrect

cas 2: lorsque vous essayez de vous connecter à partir d'une application

cas 3: lorsque vous essayez de vous connecter à partir du domaine autre que votre fuseau horaire / domaine / ordinateur (c'est le cas dans la plupart des scénarios lors de l'envoi de courrier à partir du code)

Il existe une solution pour chaque

solution pour le cas 1: Entrez le mot de passe correct.

solution 1 pour le cas 2 : accédez aux paramètres de sécurité sur le lien suivant https://www.google.com/settings/security/lesssecureapps et activez les applications moins sécurisées. Pour que vous puissiez vous connecter à partir de toutes les applications.

solution 2 pour le cas 2 : (voir https://stackoverflow.com/a/9572958/52277 ) activez l'authentification à deux facteurs (aka vérification en deux étapes), puis générez un mot de passe spécifique à l'application. Utilisez ce mot de passe nouvellement généré pour vous authentifier via SMTP.

solution 1 pour le cas 3: (Cela pourrait être utile) vous devez revoir l'activité. mais l'examen de l'activité ne sera pas utile en raison des dernières normes de sécurité, le lien ne sera pas utile. Essayez donc le cas ci-dessous.

solution 2 pour le cas 3 : si vous avez hébergé votre code quelque part sur le serveur de production et si vous avez accès au serveur de production, connectez le bureau à distance au serveur de production et essayez de vous connecter une fois depuis le navigateur du serveur de production. Cela ajoutera une excpetioon pour la connexion à Google et vous serez autorisé à vous connecter à partir du code.

Mais que faire si vous n'avez pas accès au serveur de production. essayez la solution 3

solution 3 pour le cas 3: vous devez activer la connexion à partir d'un autre fuseau horaire / ip pour votre compte Google.

pour ce faire, suivez le lien https://g.co/allowaccess et autorisez l'accès en cliquant sur le bouton continuer.

Et c'est tout. Voici. Vous pouvez maintenant vous connecter depuis n'importe quel ordinateur et par n'importe quel moyen d'application à votre compte Google.


10
Solution 2! Vous petite beauté!
George Harnwell

2
Le lien lesssecureapps ci-dessus a aidé :)
Gautam Jain

Wow, cela devrait être marqué comme réponse acceptée. Merci.
Nic

5
site hébergé sur azur doit suivre la solution 3 pour le cas 3: lien final qui aide g.co/allowaccess
Ravi Anand

1
Solution 2 pour le cas 3 - a fonctionné comme un charme pour moi. Merci.
ss_mj

106

C'est un problème de sécurité, Gmail empêche par défaut l'accès à votre compte de messagerie à partir d'applications personnalisées. Vous pouvez le configurer pour accepter la connexion de votre application.

Après vous être connecté à votre e-mail, CLIQUEZ ICI

Cela vous amènera à la page suivante

Page Applications moins sécurisées


1
De plus, si vous avez un domaine personnalisé, les utilisateurs doivent d'abord être activés par l'administrateur du domaine pour permettre l'accès à des applications moins sécurisées. Si vous êtes administrateur de domaine, cliquez sur le lien suivant pour activer cet administrateur.google.com/AdminHome#ServiceSettings/…
user551113

2
Cette réponse est excellente. Il fonctionne comme un charme. Je vous remercie.
Thomas.Benz

24

Après avoir passé quelques heures aujourd'hui à essayer toutes les solutions ici, je n'arrivais toujours pas à surmonter cette erreur exacte. J'ai utilisé gmail plusieurs fois de cette façon, donc je savais que c'était quelque chose de stupide, mais rien de ce que j'ai fait n'a résolu le problème. Je suis finalement tombé sur la solution dans mon cas alors j'ai pensé partager.

Tout d'abord, la plupart des réponses ci-dessus sont également requises, mais dans mon cas, il s'agissait simplement de SmtpClientclasser le code lors de la création de la classe.

Dans ce premier extrait de code ci-dessous, notez où Credentials = credsse trouve la ligne. Cette implémentation générera l'erreur référencée dans cette question même si tout le reste est correctement configuré.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

Cependant, si vous déplacez l'appel de définition des informations d'identification vers le bas, l'e-mail sera envoyé sans erreur. Je n'ai apporté aucune modification au code environnant ... c'est-à-dire ... le nom d'utilisateur / mot de passe, etc. De toute évidence, soit le EnableSSL, UseDefaultCredentials, or the DeliveryMethoddépend de la Credentialsdéfinition en premier ... .

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

J'espère que cela vous évitera des maux de tête à l'avenir.


2
Dans mon cas, j'ai eu le même problème que le vôtre, en réordonnant le code afin que les informations d'identification soient arrivées en dernier pour moi.
Dev

1
Je ne peux pas le croire mais cela a fonctionné! J'ai activé 2 étapes, car je ne voulais pas activer l'indicateur moins sécurisé, mais jusqu'à ce que je mette les informations d'identification en dernier avant d'envoyer, il ne voulait pas fonctionner. Incroyable!
Čikić Nenad

6
Le problème est que dans UseDefaultCredentialssetter il y a ce code: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;qui remplace credentialsdéfini par Credentialssetter. Pour moi, cela ressemble à SmtpClientun bug
Tomasz Madeyski

@TomaszMadeyski ce doit être une réponse au lieu d'un commentaire! c'est mon problème ... comment diable je peux penser que si je définis les informations d'identification sur le constructeur et que j'attribue à nouveau une fausse valeur UseDefaultCredentials = false, il remplace les informations d'identification ... fou !! mais cela arrive .... merci youuuuu
FabianSilva


12

Salut, j'ai eu le même problème,

ce que j'ai fait pour le résoudre. consiste à activer l'application la moins sécurisée. après m'être connecté à mon compte gmail. J'ai entré ce lien: https://www.google.com/settings/security/lesssecureapps

Ensuite, j'active l'application sécurisée et, et cela a fonctionné. il a été dit aussi ci-dessus


Alors, quelle est la différence que votre réponse pour la réponse ci-dessus ? La même réponse vous est donnée le 12 janvier 15 à 10 h 36.
Dush

11

J'ai un code fonctionnant précédemment qui jette cette erreur maintenant. Aucun problème sur le mot de passe. Pas besoin non plus de convertir le message en base64. Il s'avère que je dois faire ce qui suit:

  1. Désactiver l'authentification à 2 facteurs
  2. Réglez «Autoriser les applications moins sécurisées» sur ON
  3. Connectez-vous à votre compte gmail depuis le serveur de production
  4. Allez ici aussi pour approuver l'activité de connexion
  5. Exécutez votre application sur le serveur de production

Code de travail

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

Désactiver l'authentification à 2 facteurs Désactiver l'authentification à 2 facteurs

Réglez «Autoriser les applications moins sécurisées» sur ON (même page, faites défiler vers le bas) Autoriser les applications moins sécurisées


9

Suivez simplement l'étape dans l'e-mail Google et activez les applications moins sécurisées.


6

J'ai rencontré le même problème. Cela se produit lorsque vous activez la vérification en deux étapes (MFA). Désactivez simplement la vérification en 2 étapes et votre problème devrait être résolu.


Je n'avais pas activé en deux étapes pour ce compte et j'ai eu ce problème.
Shiv

4

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 incorrect. Le code ci-dessous fonctionnera parfaitement.

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            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 référencer sur mon blog


j'utilise le même code qui fonctionne sur ma machine locale mais ne fonctionne pas sur le serveur. Obtenir une erreur Le serveur SMTP nécessite une connexion sécurisée ou le client n'a pas été authentifié. La réponse du serveur était: 5.5.1 Authentification requise. .
Akshay Chawla

1
j'ai contacté mon hébergeur, ils m'ont dit: nous avons pu voir que vous avez configuré une troisième partie SMTP (smtp.gmail.com) qui ne sera pas prise en charge dans notre environnement de serveur partagé. En raison d'un abus excessif de la fonction de messagerie ou d'un problème de spam, la fonction de messagerie n'est pas prise en charge. Vous pouvez envoyer des e-mails à l'aide de PHPMailer, qui est très populaire et souvent utilisé. mais mon site est construit en mvc c #, alors comment utiliser phpmailer?
Akshay Chawla


2

J'ai eu le même problème pour une application déployée sur Microsoft Azure.

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

J'ai d'abord approuvé tous les appareils inconnus (certaines adresses IP provenant d'Irlande) sur la page suivante (connecté en tant qu'utilisateur gmail): https://security.google.com/settings/u/1/security/secureaccount

J'ai utilisé les paramètres suivants pour le client:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

Il a commencé à fonctionner uniquement après avoir défini la propriété suivante sur le client smtp:

client.TargetName = "STARTTLS/smtp.gmail.com";

2

Ce qui a fonctionné pour moi, c'est d'activer l'option pour les applications moins sécurisées (j'utilise VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

Connectez-vous à votre compte, puis accédez à google.com/settings/security/lesssecureapps


2

Un commentaire de Tomasz Madeyski est ce qui a résolu mon problème ... il raconte qu'il existe un bug sur SetDefaultCredential, lui dit:

"Le problème est que dans le setter UseDefaultCredentials, il y a ce code: this.transport.Credentials = valeur? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; qui remplace les informations d'identification définies par le setter Credentials. Pour moi, cela ressemble à un bug de SmtpClient

si vous mettez smtpClient.UseDefaultCredentials = falseaprès les informations d'identification définies ... cette ligne définie pour annuler ces informations d'identification ...


2

NOVEMBRE 2018, ont tout essayé sans succès.

Voici la solution qui a finalement fonctionné. Malheureusement, il n'utilise pas SSL, mais cela fonctionne !!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

1

J'ai essayé toutes les suggestions trouvées ici, de l'activation des applications moins sécurisées au port 587 ... rien n'a fonctionné. Enfin, je viens de commenter la ligne UseDefaultCredentials = false. Tout fonctionnait si je ne touchais pas ce booléen.


1
même ici .. je ne peux pas croire qu'une seule ligne m'a pris une heure!
Wahid Masud

0

J'ai vraiment regardé beaucoup d'idées, la seule solution était de cette façon (fonctionne avec différents fournisseurs de messagerie):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...

0

Je suis un abonné Google Apps for Business et je passe les dernières heures à m'occuper de cela, même après avoir tous les paramètres corrects (smtp, port, enableSSL, etc.). Voici ce qui a fonctionné pour moi et les sites Web qui lançaient l'erreur 5.5.1 en essayant d'envoyer un e-mail:

  1. Connectez-vous à votre admin.google.com
  2. Cliquez sur SÉCURITÉ <- si ce n'est pas visible, puis cliquez sur «PLUS DE CONTRÔLES» et ajoutez-le à partir de la liste
  3. Cliquez sur Paramètres de base
  4. Faites défiler vers le bas de la zone Paramètres de base, cliquez sur le lien: «Accéder aux paramètres des applications moins sécurisées»
  5. Sélectionnez l'option n ° 3: imposer l'accès à des applications moins sécurisées pour tous les utilisateurs (non recommandé)
  6. Appuyez sur ENREGISTRER en bas de la fenêtre

Après cela, mes formulaires de courriel du site Web fonctionnaient à nouveau. Bonne chance!


0

Vous devrez peut-être créer / générer un mot de passe APP spécifique à partir de gmail. votre application ou script utilisera alors ce nouveau mot de passe au lieu de votre mot de passe habituel. Votre mot de passe habituel fonctionnera toujours bien pour vous.

C'est ce qui m'a fait ça. J'ai toujours utilisé le même compte de messagerie, mais j'ai dû générer un nouveau mot de passe spécifique à l'application.

https://support.google.com/accounts/answer/185833?hl=en

Capture d'écran

Fondamentalement, vous pouvez le faire ici: https://security.google.com/settings/security/apppasswords


0

Si vous utilisez gmail.

  • 1 connexion à votre compte

    2- parcourir ce lien

    3- Autoriser les applications moins sécurisées: ON

Prendre plaisir....



0

ne mettez pas de point d'arrêt avant d'attendre smtp.SendMailAsync (mail);

:)

quand il attend avec un point d'arrêt donnant cette erreur quand je supprime le point d'arrêt, cela a fonctionné


-1

J'ai utilisé toutes les solutions mentionnées ci-dessus, mais cela n'a finalement fonctionné qu'après avoir activé l'accès IMAP à partir des paramètres Gmail Lien pour activer l'accès IMAP dans les paramètres Gmail

Bien entendu, les points des autres solutions étaient également nécessaires.


Cela ne m'a pas aidé. L'activation d'IMAP vous permet simplement de lire les e-mails Gmail à partir d'autres clients de messagerie comme Outlook, Thunderbird.
kimbaudi

-5

essayez de changer l'hôte, c'est le nouveau, j'ai obtenu cette configuration mozilla thunderbird

Host = "smtp.googlemail.com"

ça marche pour moi

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.