Envoi de courrier électronique via le serveur SMTP Gmail avec C #

Pour une raison quelconque, ni la réponse acceptée, ni aucune autre ne fonctionne pour moi pour ” Envoyer un courrier électronique en .NET via Gmail “. Pourquoi ne travailleraient-ils pas?

MISE À JOUR: J’ai essayé toutes les réponses (acceptées et non) dans l’autre question, mais aucune ne fonctionne.

Je voudrais juste savoir si cela fonctionne pour quelqu’un d’autre, sinon Google peut avoir changé quelque chose (ce qui s’est déjà produit).

Lorsque j’essaie le morceau de code qui utilise SmtpDeliveryMethod.Network , je reçois rapidement une exception SmtpException sur Send (message). Le message est

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 requirejse. En savoir plus à “<- sérieusement, ça se termine là.

METTRE À JOUR:

C’est une question que j’ai posée il y a longtemps, et la réponse acceptée est le code que j’ai utilisé de nombreuses fois sur différents projets.

J’ai pris quelques idées dans cet article et d’autres projets EmailSender pour créer un projet EmailSender chez Codeplex . Il est conçu pour la testabilité et prend en charge mes services SMTP favoris tels que GoDaddy et Gmail.

CVertex, assurez-vous de revoir votre code et, si cela ne révèle rien, postez-le. Je viens d’activer ceci sur un site de test ASP.NET sur lequel je travaillais et ça marche.

En fait, à un moment donné, j’ai eu un problème avec mon code. Je ne l’ai pas repéré avant d’avoir une version plus simple sur un programme de console et j’ai vu que cela fonctionnait (pas de changement du côté de Gmail car vous étiez inquiet). Le code ci-dessous fonctionne exactement comme les exemples que vous avez mentionnés:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; using System.Net; namespace ConsoleApplication2 { class Program { static void Main(ssortingng[] args) { var client = new SmtpClient("smtp.gmail.com", 587) { Credentials = new NetworkCredential("[email protected]", "mypwd"), EnableSsl = true }; client.Send("[email protected]", "[email protected]", "test", "testbody"); Console.WriteLine("Sent"); Console.ReadLine(); } } } 

Je l’ai également fait fonctionner en utilisant une combinaison de web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx et code (car il n’y a pas de EnableSsl correspondant dans le fichier de configuration :().

LES MESURES SUIVANTES SERONT CERTAINEMENT LA REPONSE A VOTRE QUESTION SI TOUT AUTRE A ECHOUE :

J’ai eu exactement la même erreur, il s’avère que le nouvel algorithme de mesure de la force du mot de passe de Google a changé en jugeant mon mot de passe actuel comme trop faible, et ne rien me dire (pas même un message ou un avertissement) … ? Eh bien, j’ai choisi de changer mon mot de passe pour voir si cela aiderait (tout essayé sans succès) et quand j’ai changé mon mot de passe, cela a fonctionné!

Puis, pour une expérience, j’ai essayé de changer mon mot de passe pour retrouver mon ancien mot de passe pour voir ce qui se passerait, et Gmail ne m’a pas permis de le faire, citant la raison “désolé, nous ne pouvons pas enregistrer ce changement comme votre choix le mot de passe est trop faible “et ne me laisserait pas revenir à mon ancien mot de passe. Je me suis rendu compte que c’était une erreur parce que soit a) vous devez changer votre mot de passe une fois tous les x mois ou b). comme je le disais précédemment, leurs algorithmes de renforcement de mot de passe ont changé et par conséquent, le mot de passe faible que j’avais était refusé, même s’ils ne disaient rien à ce sujet en essayant de se connecter n’importe où! Ce scénario (numéro 2) est le plus probable, car mon mot de passe faible avait environ 4 mois et il m’a permis de l’utiliser dans Gmail.

C’est vraiment dommage qu’ils n’aient rien dit à ce sujet, mais c’est logique. Étant donné que la plupart des e-mails piratés sont connectés à l’aide de logiciels en dehors de gmail, et je suppose que vous devez avoir un mot de passe plus puissant si vous souhaitez utiliser Gmail en dehors de l’environnement Gmail.

J’espère que ça aide!

En plus des autres étapes de dépannage ci-dessus, je voudrais append que si vous avez activé l’authentification à deux facteurs (également appelée vérification en deux étapes ) sur votre compte GMail, vous devez générer un mot de passe spécifique à l’application et l’utiliser Mot de passe généré pour s’authentifier via SMTP .

Pour en créer un, consultez la page https://www.google.com/settings/ et choisissez Autoriser les applications et les sites pour générer le mot de passe.

 Turn On Access For Less Secure Apps and it will work for all no need to change password. 

Lien vers le paramètre Gmail

entrer la description de l'image ici

J’ai eu quelques problèmes pour envoyer des e-mails à partir de mon compte gmail, ce qui était dû à plusieurs des situations susmentionnées. Voici un résumé de mon fonctionnement et de sa flexibilité:

  • Tout d’abord, configurez votre compte GMail:
    • Activer IMAP et affirmer le nombre maximum de messages (vous pouvez le faire ici)
    • Assurez-vous que votre mot de passe comporte au moins 7 caractères et qu’il est fort (selon Google)
    • Assurez-vous de ne pas avoir à entrer un code captcha en premier. Vous pouvez le faire en envoyant un email de test depuis votre navigateur.
  • Apportez des modifications dans web.config (ou app.config, je ne l’ai pas encore essayé, mais je suppose que c’est aussi facile de le faire fonctionner dans une application Windows):
      ...           
 Add a Class to your project: Imports System.Net.Mail Public Class SSLMail Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) GetSmtpClient.Send(e.Message) 'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too: e.Cancel = True End Sub Public Shared Sub SendMail(ByVal Msg As MailMessage) GetSmtpClient.Send(Msg) End Sub Public Shared Function GetSmtpClient() As SmtpClient Dim smtp As New Net.Mail.SmtpClient 'Read EnableSSL setting from web.config smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail")) Return smtp End Function End Class 

Et maintenant, chaque fois que vous voulez envoyer des e-mails, il vous suffit d’appeler SSLMail.SendMail :

par exemple dans une page avec un contrôle PasswordRecovery:

 Partial Class RecoverPassword Inherits System.Web.UI.Page Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail e.Message.Bcc.Add("[email protected]") SSLMail.SendMail(e) End Sub End Class 

Ou n’importe où dans votre code, vous pouvez appeler:

 SSLMail.SendMail(New system.Net.Mail.MailMessage("[email protected]","[email protected]", "Subject", "Body"}) 

J’espère que cela aide tous ceux qui courent dans cet article! (J’ai utilisé VB.NET mais je pense qu’il est sortingvial de le convertir en n’importe quel langage .NET.)

 Dim SMTPClientObj As New Net.Mail.SmtpClient SMTPClientObj.UseDefaultCredentials = False SMTPClientObj.Credentials = New System.Net.NetworkCredential("[email protected]", "mypwd") SMTPClientObj.Host = "smtp.gmail.com" SMTPClientObj.Port = 587 SMTPClientObj.EnableSsl = True SMTPClientObj.Send("[email protected]","[email protected]","test","testbody") 

Si vous obtenez une erreur du type “Le serveur SMTP requirejs une connexion sécurisée ou si le client n’a pas été authentifié. La réponse du serveur était: 5.5.1 Authentification requirejse. Pour en savoir plus, vérifiez que la ligne SMTPClientObj.UseDefaultCredentials = False inclus et cette ligne doit SMTPClientObj.Credentials le SMTPClientObj.Credentials .

J’ai essayé de changer ces 2 lignes dans le sens inverse et l’ erreur 5.5.1 Authentication Required est revenue.

Oh … C’est incroyable … D’abord, je n’ai pas pu envoyer de courriel pour quelque raison que ce soit. Mais après avoir changé la séquence de ces deux lignes comme ci-dessous, cela fonctionne parfaitement.

 //(1) client.UseDefaultCredentials = true; //(2) client.Credentials = new System.Net.NetworkCredential("[email protected]", "password"); 

J’espère que cette aide !!! 🙂

Le problème n’est pas la capacité technique à envoyer via Gmail. Cela fonctionne dans la plupart des situations. Si vous ne parvenez pas à envoyer une machine, cela est généralement dû au fait que la machine n’a pas été authentifiée avec une personne au moins une fois.

Le problème que rencontrent la plupart des utilisateurs est que Google décide de modifier les limites sortantes tout le temps. Vous devez toujours append un code défensif à votre solution. Si vous commencez à voir des erreurs, éloignez votre vitesse d’envoi et arrêtez l’envoi pendant un moment. Si vous continuez d’essayer d’envoyer Google, il se peut que vous ajoutiez parfois du temps supplémentaire à votre délai avant de pouvoir envoyer à nouveau.

Ce que j’ai fait dans mon système actuel est d’envoyer avec un délai de 1,5 seconde entre chaque message. Ensuite, si je rencontre des erreurs, arrêtez-vous pendant 5 minutes et recommencez. Cela fonctionne généralement et vous permettra d’envoyer dans les limites du compte (la dernière fois que j’ai vérifié qu’il était de 2 000 pour les connexions de premier client par jour).

J’ai eu le même problème, mais il s’est avéré que ma protection antivirus bloquait les e-mails sortants. Cette désactivation m’a permis d’utiliser le port 587 pour envoyer des e-mails SMTP via GMail

Je ne suis pas sûr de la version .NET requirejse car eglasius mentionne qu’il n’y a pas de paramètre enableSsl correspondant (j’utilise .NET 4.0, mais je pense que cela fonctionne avec .NET 2.0 ou version ultérieure), mais cette configuration a fonctionné pour moi (et ne nécessite aucune configuration par programmation):

        

Vous devrez peut-être d’abord activer POP ou IMAP sur votre compte Gmail: https://mail.google.com/mail/?shva=1#settings/fwdandpop

Je recommande de l’essayer avec un client de messagerie normal en premier …

Si rien d’autre n’a fonctionné ici, vous devrez peut-être autoriser l’access à votre compte gmail à partir d’applications tierces. C’était mon problème. Pour autoriser l’access, procédez comme suit:

  1. Connectez-vous à votre compte gmail.
  2. Visitez cette page https://accounts.google.com/DisplayUnlockCaptcha et cliquez sur le bouton pour autoriser l’access.
  3. Visitez cette page https://www.google.com/settings/security/lesssecureapps et activez l’access à des applications moins sécurisées.

Cela a fonctionné pour moi espère que cela fonctionne pour quelqu’un d’autre!

Des étapes simples pour résoudre ce problème:

1) Connectez-vous à votre compte Gmail

2) Accédez à cette page https://www.google.com/settings/security/lesssecureapps et définissez-la sur “Activer”.

@Andres Pompiglio: Oui, vous devez changer votre mot de passe au moins une fois. Ce code fonctionne très bien:

 //Satrt Send Email Function public ssortingng SendMail(ssortingng toList, ssortingng from, ssortingng ccList, ssortingng subject, ssortingng body) { MailMessage message = new MailMessage(); SmtpClient smtpClient = new SmtpClient(); ssortingng msg = ssortingng.Empty; try { MailAddress fromAddress = new MailAddress(from); message.From = fromAddress; message.To.Add(toList); if (ccList != null && ccList != ssortingng.Empty) message.CC.Add(ccList); message.Subject = subject; message.IsBodyHtml = true; message.Body = body; // We use gmail as our smtp client smtpClient.Host = "smtp.gmail.com"; smtpClient.Port = 587; smtpClient.EnableSsl = true; smtpClient.UseDefaultCredentials = true; smtpClient.Credentials = new System.Net.NetworkCredential( "Your Gmail User Name", "Your Gmail Password"); smtpClient.Send(message); msg = "Successful
"; } catch (Exception ex) { msg = ex.Message; } return msg; } //End Send Email Function

ET vous pouvez appeler la fonction en utilisant:

 Response.Write(SendMail(recipient Address, "[email protected]", "ccList if any", "subject", "body")) 

J’ai également constaté que le compte avec lequel je me connectais était désactivé par Google pour une raison quelconque. Une fois que j’ai réinitialisé mon mot de passe (à l’identique), j’ai pu envoyer des e-mails correctement. Je recevais aussi un message 5.5.1.

J’avais aussi essayé de nombreuses solutions mais fais quelques changements, ça marchera

 host = smtp.gmail.com port = 587 username = [email protected] password = password enabledssl = true 

avec smtpclient les parameters ci-dessus fonctionnent dans gmail

J’utilisais une connexion VPN d’entreprise. C’était la raison pour laquelle je ne pouvais pas envoyer de courrier électronique à partir de mon application. Cela fonctionne si je me déconnecte du VPN.

J’ai rencontré la même 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 requirejse. En savoir plus sur” ) et j’ai découvert que j’utilisais un mot de passe incorrect. J’ai corrigé les identifiants de connexion et ils ont été envoyés correctement.

Je sais que c’est en retard, mais peut-être que cela aidera quelqu’un d’autre.

Une autre chose que j’ai trouvée est que vous devez changer votre mot de passe au moins une fois. Et essayez d’utiliser un mot de passe de niveau sécurisé (n’utilisez pas le même utilisateur que le mot de passe, 123456, etc.)

J’avais la même erreur et aucune des solutions ci-dessus n’a aidé.

Mon problème était que j’exécutais le code d’un serveur distant, qui n’avait jamais été utilisé pour se connecter au compte gmail.

J’ai ouvert un navigateur sur le serveur distant et connecté à Gmail à partir de là. Il a posé une question de sécurité pour vérifier que c’était moi puisque c’était un nouvel emplacement. Après avoir effectué le contrôle de sécurité, j’ai pu m’authentifier par code.

Encore une autre solution possible pour vous. Je rencontrais des problèmes similaires lors de la connexion à Gmail via IMAP. Après avoir essayé toutes les solutions que vous avez trouvées, vous en apprendrez plus sur ici et ailleurs sur SO (par exemple, activer IMAP, autoriser un access moins sécurisé à votre messagerie, en utilisant https://accounts.google.com/b/0/displayunlockcaptcha et ainsi de suite), j’ai en fait mis en place un nouveau compte gmail une fois de plus.

Dans mon test original, le premier compte gmail que j’avais créé, je m’étais connecté à mon compte gmail principal. Cela a entraîné un comportement erratique où le mauvais compte était référencé par Google. Par exemple, exécuter https://accounts.google.com/b/0/displayunlockcaptcha a ouvert mon compte principal plutôt que celui que j’avais créé à cet effet.

Donc, lorsque j’ai créé un nouveau compte et que je ne l’ai pas connecté à mon compte principal, après avoir suivi toutes les étapes appropriées ci-dessus, j’ai constaté que cela fonctionnait bien!

Je ne l’ai pas encore confirmé (c.-à-d. Reproduit), mais apparemment cela l’a fait pour moi … j’espère que ça aide.

Activez les applications moins sécurisées pour votre compte: https://www.google.com/settings/security/lesssecureapps

  1. Vérifiez d’abord les parameters de votre compte Gmail et activez l’option “Accès à des applications moins sécurisées”. entrer la description de l'image ici

Nous vous recommandons fortement d’utiliser une application sécurisée, telle que Gmail, pour accéder à votre compte. Toutes les applications créées par Google répondent à ces normes de sécurité. L’utilisation d’une application moins sécurisée peut en revanche rendre votre compte vulnérable. Apprendre encore plus.

  1. Ensemble

     smtp.UseDefaultCredentials = false; 

    avant

     smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); 

Vous pouvez également vous connecter via le port 465, mais en raison de certaines limitations de l’espace de noms System.Net.Mail, vous devrez peut-être modifier votre code. En effet, l’espace de noms n’offre pas la possibilité d’établir des connexions SSL implicites. Ceci est discuté à http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx , et je ont fourni un exemple d’utilisation de l’object CDO (Collaborative Data Object) dans une autre discussion ( erreurs SMail GMail via C # .Net sur tous les ports ).

J’ai eu ce problème résolu. Par conséquent, ce message est utilisé dans plusieurs types d’erreur. Mon problème était que j’avais atteint mon maximum de 500 mails envoyés.

Connectez-vous au compte et essayez manuellement d’envoyer un mail. Si la limite a été atteinte, il vous informera

Une ou plusieurs raisons sont là pour ces erreurs.

  • Connectez-vous avec votre compte Gmail (ou tout autre si) dans votre système local.

  • Recherchez également l’application moins sécurisée et réglez-la sur “Activer”, voici le lien pour GMAIL. https://www.google.com/settings/security/lesssecureapps

  • Recherchez EnableSsl dans votre code de messagerie et définissez-le également sur true.

     smtp.EnableSsl = true; 
  • Vérifiez également quel port utilisez-vous actuellement. 25 est Global, mais vous pouvez le vérifier pour les autres, comme 587. cochez ici. Est-ce que toutes les communications SMTP ont plus de 25 ans?

  • SI VOUS ÊTES À DISTANCE : Vérifiez la réponse de Vlad Tamas ci-dessus.

  smtp.Host = "smtp.gmail.com"; //host name smtp.Port = 587; //port number smtp.EnableSsl = true; //whether your smtp server requires SSL smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); smtp.Timeout = 20000; 

Changez votre mot de passe gmail et essayez à nouveau, cela devrait fonctionner après cela.

Je ne sais pas pourquoi, mais chaque fois que vous modifiez votre hébergement, vous devez changer votre mot de passe.