Envoyer un e-mail 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 " L'envoi de courrier électronique dans .net par Gmail ". Pourquoi ne seraient-ils pas de travail?

mise à JOUR: j'ai essayé toutes les réponses (acceptée ou non) dans l'autre question, mais aucune de ces travaux.

je voudrais juste savoir si cela fonctionne pour quelqu'un d'autre, sinon Google peut avoir changé quelque chose (qui s'est produit avant).

Quand j'essaie le morceau de code qui utilise SmtpDeliveryMethod.Network , je reçois rapidement une 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 Requise. En savoir plus sur" <-- au sérieux, il s'arrête là.

Mise à 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é à plusieurs reprises sur différents projets.

j'ai pris certaines des idées dans ce post et d'autres projets EmailSender pour créer un projet EmailSender à Codeplex . Il est conçu pour tester et prend en charge mes services SMTP préférés tels que GoDaddy et Gmail.

214
demandé sur Community 2009-04-01 12:45:39

27 réponses

CVertex, assurez-vous de revoir votre code, et, si cela ne révèle rien, postez-le. J'autorisais juste ça pour un test. ASP.NET site 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é jusqu'à ce que j'ai eu une version plus simple sur un programme de console et j'ai vu que ça marchait (aucun changement du côté de Gmail car vous étiez inquiet). Le code ci-dessous fonctionne exactement comme les échantillons auxquels vous avez fait référence:

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(string[] args)
        {
            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

Je l'ai aussi fait fonctionner en utilisant une combinaison de web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx et code (parce qu'il n'y a pas de correspondance EnableSsl dans le fichier de configuration :( ).

268
répondu eglasius 2011-02-17 22:20:02

THE FOLLOWING WILL ALMOST CERTAINLY BE THE ANSWER TO YOUR QUESTION IF ALL ELSE HAS FAILED :

j'ai eu exactement la même erreur, il s'avère que le nouvel algorithme de mesure strenggh de mot de passe de Google a changé en considérant mon mot de passe actuel comme trop faible, et en ne me disant rien à ce sujet (même pas un message ou un avertissement)... Comment ai-je découvrir? Eh bien, j'ai choisi de changer mon mot de passe pour voir si cela peut aider (essayé tout le reste en vain) et quand j'ai changé mon mot de passe, ça a marché!

alors, pour une expérience, j'ai essayé de changer mon mot de passe de nouveau à mon mot de passe précédent pour voir ce qui se passerait, et Gmail ne m'a pas réellement permis de le faire, citant la raison "Désolé, nous ne pouvons pas vous permettre de sauvegarder ce changement que votre mot de passe choisi est trop faible" et ne me laisserait pas revenir à mon ancien mot de passe. J'ai pensé que c'était erroring arrière, soit parce que a) vous avez besoin de changer votre mot de passe une fois tous les x nombre de mois ou b). comme je l'ai déjà dit, leurs algorithmes de puissance de mot de passe ont changé et donc le mot de passe faible que j'avais n'a pas été accepté, même s'ils n'ont rien dit à ce sujet en essayant de se connecter N'importe où! Ce (numéro 2) est le scénario 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 assez mauvais qu'ils n'aient rien dit à ce sujet, mais ça a du sens. Parce que la plupart des emails détournés sont connecté en utilisant un logiciel en dehors de gmail, et je devine que vous êtes tenu d'avoir un mot de passe plus fort si vous voulez utiliser Gmail en dehors de L'environnement Gmail.

j'espère que cela aide!

64
répondu Erx_VB.NExT.Coder 2013-07-31 12:16:13

en plus des autres étapes de dépannage ci-dessus, je voudrais aussi ajouter que si vous avez activé l'authentification à deux facteurs (également connu sous le nom de vérification en deux étapes ) sur votre compte GMail, vous doit générer un mot de passe spécifique à l'application et utiliser ce nouveau mot de passe généré pour authentifier via SMTP .

pour en créer un, visitez: https://www.google.com/settings / et choisir autorisation des applications et des sites pour générer le mot de passe.

59
répondu John Rasch 2012-03-05 19:48:48
Turn On Access For Less Secure Apps and it will work for all no need to change password.

Lien vers Gmail Paramètre

enter image description here

43
répondu Suhail Mumtaz Awan 2015-02-19 09:18:21

j'ai eu quelques problèmes en envoyant des e-mails de mon compte gmail aussi, qui étaient dus à plusieurs des situations mentionnées ci-dessus. Voici un résumé de la façon dont je l'ai fait fonctionner, et le garder flexible en même temps:

  • tout d'abord configurer votre compte GMail:
    • activer IMAP et affirmer le nombre maximum de messages (vous pouvez le faire ici)
    • assurez-vous que votre mot de passe est à moins de 7 caractères et est fort (selon Google)
    • assurez-vous que vous n'avez pas à entrer un code captcha en premier. Vous pouvez le faire en envoyant un e-mail de test depuis votre navigateur.
  • faire des changements dans le web.config (ou de l'application.config, je n'ai pas encore essayé cela, mais je suppose que c'est tout aussi facile de le faire fonctionner dans une application windows):
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>   
    </appSettings>

    <!-- other settings --> 

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="yourusername@gmail.com" deliveryMethod="Network">
                <network 
                    defaultCredentials="false" 
                    host="smtp.gmail.com" 
                    port="587" 
                    password="stR0ngPassW0rd" 
                    userName="yourusername@gmail.com"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
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 quand vous voulez envoyer des e-mails tout ce que vous devez faire est d'appeler SSLMail.SendMail :

p.ex. 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("webmaster@example.com")
    SSLMail.SendMail(e)
End Sub

End Class

ou n'importe où dans votre code vous pouvez appeler:

SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})

j'espère que cela aide quelqu'un qui s'exécute dans ce post! (J'ai utilisé VB.NET mais je pense que c'est trivial de le convertir à n'importe quelle langue.net.)

28
répondu Sebas 2016-03-03 14:22:03
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")

si vous obtenez une erreur comme "le serveur SMTP nécessite une connexion sécurisée ou le client n'a pas été authentifié. La réponse du serveur a été: 5.5.1 Authentification requise. En savoir plus à" comme je reçois avant cela, assurez-vous que la ligne SMTPClientObj.UseDefaultCredentials = False inclus et cette ligne devrait avant le SMTPClientObj.Credentials .

j'ai essayé de changer ces 2 lignes de la façon opposée et le 5.5.1 authentification requis erreur retourné.

13
répondu Terry Chng 2011-02-17 22:32:38

oh ... c'est incroyable... D'abord, je ne pouvais pas envoyer d'e-mail pour n'importe quelle raison. Mais après j'ai changé la séquence de ces deux lignes comme ci-dessous, il fonctionne parfaitement.

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");

Espérons que cette aide!!! :)

12
répondu Wirol 2012-04-12 06:59:28

le problème n'est pas un problème de capacité technique à envoyer par gmail. Qui fonctionne pour la plupart des situations. Si vous ne pouvez pas obtenir une machine à envoyer, il est généralement dû à la machine n'ayant pas été authentifié avec un humain aux commandes au moins une fois.

le problème auquel la plupart des utilisateurs sont confrontés est que Google décide de changer les limites de sortie tout le temps. Vous devez toujours ajouter du code de défense à votre solution. Si vous voyez des erreurs, descendez de votre vitesse d'envoi et de juste arrêter d'envoyer pendant un certain temps. Si vous continuez à essayer D'envoyer Google va parfois ajouter 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 j'ai des erreurs, arrêtez pendant 5 minutes et recommencez. Cela fonctionne habituellement et vous permettra d'envoyer jusqu'aux limites du compte (la dernière fois que j'ai vérifié il était de 2000 pour les connexions de premier client par jour).

9
répondu Jason Short 2009-08-26 06:28:58

j'ai eu le même problème, mais il s'est avéré être ma protection de virus bloquait" spam " e-mail sortant. Désactiver cela m'a permis d'utiliser le port 587 pour envoyer des emails SMTP via GMail

9
répondu user464329 2010-10-01 23:50:15

étapes Simples pour résoudre ce problème:

1)Connectez-vous à votre Gmail

2)Accédez à cette page https://www.google.com/settings/security/lesssecureapps et à "allumer"

9
répondu Kevin 2016-04-11 03:56:30

Je ne sais pas quelle version .NET est nécessaire pour cela parce qu'eglasius a mentionné qu'il n'y a pas de paramètre enableSsl correspondant (j'utilise .NET 4.0, mais je soupçonne qu'il fonctionne dans .NET 2.0 ou plus tard), mais cette configuration a fonctionné pour moi (et ne vous oblige pas à utiliser une configuration programmée):

<system.net>
  <mailSettings>
    <smtp from="myusername@gmail.com" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername@gmail.com"/>
    </smtp>
  </mailSettings>
</system.net>

vous pourriez avoir à activer POP ou IMAP sur votre compte Gmail en premier: https://mail.google.com/mail/?shva=1#settings/fwdandpop

je recommande de l'essayer avec un client mail normal d'abord...

8
répondu Wiebe Tijsma 2011-02-17 22:30:32

Si rien d'autre n'a fonctionné ici pour vous, vous devrez peut-être autoriser l'accès à votre compte gmail à partir d'applications tierces. C'était mon problème. Pour permettre l'accès, faites ce qui suit:

  1. connectez-vous à votre compte gmail.
  2. visitez cette page https://accounts.google.com/DisplayUnlockCaptcha et cliquez sur le bouton pour autoriser l'accès.
  3. visitez cette page https://www.google.com/settings/security/lesssecureapps et d'activer l'accès pour les applications moins sécurisées.

cela a fonctionné pour moi espérons que cela fonctionne pour quelqu'un d'autre!

8
répondu Celt 2015-05-10 01:37:04

@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 string SendMail(string toList, string from, string ccList,
    string subject, string body)
{

    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();
    string msg = string.Empty;
    try
    {
        MailAddress fromAddress = new MailAddress(from);
        message.From = fromAddress;
        message.To.Add(toList);
        if (ccList != null && ccList != string.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<BR>";
    }
    catch (Exception ex)
    {
        msg = ex.Message;
    }
    return msg;
}
//End Send Email Function

et vous pouvez faire un appel à la fonction en utilisant:

Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body"))
6
répondu maxcoder 2012-04-12 07:01:41

j'ai également constaté que le compte que j'ai utilisé pour me connecter a été désactivé par google pour une raison quelconque. Une fois que j'ai réinitialisé mon mot de passe (comme avant), j'ai pu envoyer des e-mails. Je recevais aussi un message de 5.5.1.

5
répondu RKL 2011-02-03 21:58:43

j'ai aussi essayé de nombreuses solutions mais faire quelques changements, il va fonctionner

host = smtp.gmail.com
port = 587
username = email@gmail.com
password = password
enabledssl = true

avec smtpclient les paramètres ci-dessus sont des travaux dans gmail

5
répondu Suresh 2012-04-12 06:59:56

j'utilisais une connexion VPN d'entreprise. C'est la raison pour laquelle je n'ai pas pu envoyer de courriel à partir de ma demande. Cela fonctionne si je me déconnecte du VPN.

5
répondu Ned 2013-07-08 00:03:35

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 a été: 5.5.1 Authentification requise. Pour en savoir plus, cliquez sur" ") et j'ai découvert que j'utilisais le mauvais mot de passe. 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 ça aidera quelqu'un d'autre.

4
répondu Albert Bori 2010-08-03 22:34:40

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 mot de passe, 123456, etc.)

4
répondu Peter Mortensen 2011-02-17 22:28:46

j'avais la même erreur et aucune des solutions ci-dessus aidé.

mon problème était que j'exécutais le code à partir 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 endroit. Après avoir fait le contrôle de sécurité j'ai été en mesure d'authentifier par le code.

4
répondu Vlad Tamas 2013-08-19 20:56:37

encore une autre solution possible pour vous. J'avais des problèmes similaires avec gmail via IMAP. Après avoir essayé toutes les solutions que j'ai trouvé que vous pourrez lire ici et ailleurs sur (eg. activez IMAP, activez un accès moins sécurisé à votre courrier, en utilisant https://accounts.google.com/b/0/displayunlockcaptcha et ainsi de suite), j'ai en fait créé un nouveau compte gmail Une fois de plus.

dans mon test original, le premier compte gmail que j'ai eu créé, j'avais connecté à mon compte gmail principal. Cela a donné lieu à 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 quand 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 comme ci-dessus, j'ai constaté que cela a fonctionné amende!

je n'ai pas encore confirmé l'existence de ce (ie. reproduit), mais elle l'a apparemment fait pour moi...espérons que cela aide.

4
répondu sinewave440hz 2015-01-16 15:36:33

activez des applications moins sûres pour votre compte: https://www.google.com/settings/security/lesssecureapps

4
répondu Burak Kalkan 2015-12-27 00:39:01
  1. Vérifiez D'abord vos paramètres de compte gmail et activez depuis" accès pour les applications moins sécurisées" enter image description here

Nous vous recommandons fortement d'utiliser un app, comme 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ûre, d'un autre côté, pourrait laisser votre compte vulnérable. En savoir plus.

  1. Set

    smtp.UseDefaultCredentials = false;
    

    avant

    smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
    
4
répondu reza.cse08 2016-02-27 12:26:45

vous pouvez également vous connecter via le port 465, mais en raison de certaines limites du système.Net.Vous devrez peut-être modifier votre code. C'est parce que l'espace de noms n'offre pas la possibilité de faire 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 j'ai fourni un exemple d'utilisation du CDO (Collaborative Data Object) dans un autre discussion ( GMail SMTP via des erreurs c# .Net sur tous les ports ).

3
répondu Bryan Allred 2017-05-23 12:10:07

j'ai eu ce problème résolu. Apparemment ce message est utilisé dans plusieurs types d'erreurs. Mon problème était que j'avais atteint mon maximum de 500 courriers envoyés.

ouvrir une session dans le compte et essayer manuellement d'envoyer un courrier. Si la limite a été atteinte, elle vous informera

3
répondu Ayson Baxter 2011-04-20 19:02:53

une ou plusieurs raisons expliquent cette erreur.

  • connectez-vous avec votre Gmail( ou tout autre if ) dans votre système local.

  • vérifiez aussi si L'application est moins sûre et réglez-la sur" Turn On " voici le lien pour GMAIL. https://www.google.com/settings/security/lesssecureapps

  • vérifiez pour EnableSsl dans votre code E-Mail, et aussi attribuez la valeur true.

    smtp.EnableSsl = true;
    
  • vérifiez également le port que vous utilisez actuellement. 25 est Mondial, mais vous pouvez le vérifier pour d'autres aussi comme 587. vérifiez ici. N'toutes les communications SMTP arriver plus de 25?

  • si vous êtes à distance : cochez la réponse de Vlad Tamas ci-dessus.

3
répondu Bharat 2017-05-23 12:26:10
  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;
2
répondu somesh 2018-04-11 23:33:27

changez votre mot de passe gmail et réessayez, cela devrait fonctionner après cela.

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

1
répondu Jo Smo 2016-07-09 20:54:50