web-dev-qa-db-fra.com

Impossible d'autoriser Gmail smtp via MailMessage & smtpClient

Je n'arrive pas à comprendre pourquoi je ne travaille pas

SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"),
    EnableSsl = true,
    Timeout = 10000
};


smtp.Send(mail);

Je reçois:

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 viens de spécifier EnableSsl sur true, ce qui ne devrait pas poser problème en termes de connexion sécurisée.

Je cours ceci de localhost. Et oui, mon nom d'utilisateur et mon mot de passe que je saisis pour authentifier (les informations d'identification de mon compte Gmail) sont corrects à 100%.

18
PositiveGuy

Je sais que c'est un sujet ancien, MAIS ... Google a modifié quelque chose dans ses paramètres de sécurité.

J'étais aux prises avec toutes les réponses jusqu'à ce que je vérifie mon courrier électronique avec un courrier de Google indiquant que "nous avons récemment bloqué une tentative de connexion sur votre compte Google".

Cela m’a conduit à cette page: Sécurité du compte Google

Dans la section "Accès aux applications moins sécurisées", vous pouvez activer l'accès à votre compte à partir d'autres appareils/applications ... comme votre application C #.

Notez qu'il n'y a plus de section "spécifique à l'application".

J'espère que cela aide quelqu'un ... Je viens de perdre 30 minutes de ma vie ...

38
Tiny

Si les informations de connexion sont correctes à 100%, vous devez définir UseDefaultCredentials = falsefirst, puis définir les informations d'identification que vous souhaitez utiliser Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere").

Si vous définissez d'abord les informations d'identification, lorsque vous définissez UseDefaultCredentials = false, la propriété Credentials devient null.

C'est câblé, mais ça m'est arrivé.

Déboguez votre code et vérifiez si la propriété Credentials est null avant d'appeler smtp.Send(message);. Si c'est le cas, essayez d'inverser l'ordre. Il semble que vous l'avez dans le bon ordre, mais s'il est nul, n'utilisez pas l'initialisation en ligne.

J'espère que ça aide.

EDIT: Si vous utilisez la vérification en deux étapes, assurez-vous que vous utilisez un Mot de passe spécifique à l'application

20
edteke

Il semble que Gmail nécessite un mot de passe spécifique à l'application (pas votre mot de passe principal). 

Veuillez examiner ceci: http://support.google.com/mail/bin/answer.py?hl=fr&answer=1173270

J'ai eu le même problème récemment.

10
Aleh Zasypkin

J'ai déjà eu ce problème et je l'ai corrigé en procédant comme suit:

  1. Accédez aux paramètres "Mon compte".
  2. Cliquez sur la catégorie "Connexion et sécurité".
  3. Faites défiler la liste jusqu'à la section "Applications et sites connectés".
  4. désactivez l'option "Autoriser les applications moins sécurisées".

Je viens de désactiver cette option et mon code a fonctionné avec succès.

3
Abdulhameed Shalabi

Cela a bien fonctionné pour moi

SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        UseDefaultCredentials = false,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential("[email protected]", "mypassword"),
        EnableSsl = true,
        Timeout = 10000
    };

    MailMessage message = new MailMessage();
    message.Body = "hello there";
    message.Subject = "hi!!";
    message.To.Add("[email protected]");
    message.From = new MailAddress("[email protected]");
    smtp.Send(message);
2
krishna

Pour moi, la solution nécessitait 2 "étapes":

  • définissez d'abord UseDefaultCredentials = false, puis définissez les informations d'identification que je souhaite utiliser Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"). Définir d'abord les informations d'identification, lorsque je définirai UseDefaultCredentials = false rendra la propriété Credentials null.
  • Autoriser les applications moins sécurisées sur mon profil Google.
1
Martino Messori
<mailSettings>
            <smtp from="[email protected]">
                <network Host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
            </smtp>
</mailSettings>

Edit: essayez d'ajouter cette ligne smtp.Credentials = Credentials après cela

Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"),

0
coder

Très simple il suffit de suivre ceci pour C # WPF Application:

       private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
        {
            using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress(MailMsgFrom);
                mailMessage.Subject = subject;
                mailMessage.Body = body;
                mailMessage.IsBodyHtml = true;
                mailMessage.To.Add(new MailAddress(recepientEmail));
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.EnableSsl = true;
                smtp.Timeout = 200000;
                System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                NetworkCred.UserName = MailMsgFrom;
                NetworkCred.Password = MailMsgPass;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mailMessage);

            }
        }

Après cela, vous devriez obtenir comme cette erreur 

smtpException   {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"}   System.Net.Mail.SmtpException

Pour résoudre ce problème, connectez-vous d'abord à votre compte de messagerie sur votre compte Google dans un navigateur Web. Ensuite, suivez ce lien Activité du compte Google . Ensuite, vous obtiendrez les derniers appareils et activités de votre compte. Si show bloque votre activité actuelle de votre appareil actuel. Il suffit de débloquer cela. Ensuite, essayez à nouveau d'envoyer un email. 
Merci

0
RKTUXYN

Avait le même problème en accédant à smtp.gmail.com à partir d'une application ASP.NET s'exécutant sur un hébergement Amazon AWS. Il s’est avéré que ma configuration était correcte - elle fonctionnait également bien à partir d’un autre ordinateur - mais Gmail refusait ma tentative de connexion, car j’essaie de me connecter depuis un emplacement inhabituel. Je me suis connecté à Gmail via l'interface Web (www.gmail.com) et j'ai dû répondre à un captcha. Après cela a fonctionné.

0
user2037013

Avoir un rappel comme suit. Dites à System.Net d'ignorer l'erreur!

Ajoutez ceci avant l'appel à Send()

ServicePointManager.ServerCertificateValidationCallback = 
    delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; };

smtp.Send(mail);
0
ukhardy

Mon problème était que le propriétaire du domaine de notre compte gmail avait désactivé à la fois "Accès pour les applications moins sécurisées" et l'authentification en deux étapes. Il n'y avait aucun moyen de l'activer, je ne pouvais même pas voir le réglage. J'ai donc testé avec mon compte personnel à la place, et cela a bien fonctionné.

0
Robert