IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] [System.Net.Mail] [SmtpCLient] Serveur ? => que mettre exactement à cet endroit ?


Sujet :

C#

  1. #1
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut [C#] [System.Net.Mail] [SmtpCLient] Serveur ? => que mettre exactement à cet endroit ?
    Salut,

    Je teste le namespace System.Net.Mail pour essayer d'envoyer un Mail.
    J'utilise l'exemple MSDN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static void CreateCopyMessage(string server)
    {
        MailAddress from = new MailAddress("ben@contoso.com", "Ben Miller");
        MailAddress to = new MailAddress("jane@contoso.com", "Jane Clayton");
        MailMessage message = new MailMessage(from, to);
        // message.Subject = "Using the SmtpClient class.";
        message.Subject = "Using the SmtpClient class.";
        message.Body = @"Using this feature, you can send an e-mail message from an application very easily.";
        // Add a carbon copy recipient.
        MailAddress copy = new MailAddress("Notification_List@contoso.com");
        message.CC.Add(copy);
        SmtpClient client = new SmtpClient(server);
        // Include credentials if the server requires them.
        client.Credentials = CredentialCache.DefaultNetworkCredentials;
        Console.WriteLine("Sending an e-mail message to {0} by using the SMTP host {1}.",
             to.Address, client.Host);
        client.Send(message);
    }
    Mon problème est le suivant :
    Dans la ligne de code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SmtpClient client = new SmtpClient(server);
    que contient exactement la variable server ?


    Quel serveur dois je utiliser pour envoyer mon mail ?
    Comment fait t-on pour trouver le serveur que l'on doit utiliser ?
    (J'aimerais par exemple utiliser mon adresse gmail)


    Merci de votre aide.

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Salut.

    D'après la MSDN, il s'agit d'un string.

    Tu peux donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SmtpClient client = new SmtpClient("smtp.gmail.com");
    Bon courage

  3. #3
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    J'ai testé en mettant comme serveur la chaîne de caractères du serveur SMTP de l'entreprise où j'effectue mon stage et en utilisant mon adresse OutLook de l'entreprise. => Ça fonctionne.




    Par contre je n'arrive pas à m'envoyer de mail sur mon adresse gmail.
    Je met bien le nom du serveur SMTP : "smtp.gmail.com" et mon adresse gmail en destinataire du message.
    => J'ai une exception générée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Net.Mail.SmtpException: Échec d'envoi du courrier. ---> System.Net.WebException: Le nom distant n'a pas pu être résolu: 'smtp.gmail.com'
    J'ai peut être une idée de pourquoi ça plante :

    ********************
    Ça provient sûrement du fait qu'il faut peut être que je m'enregistre sur mon compte gmail (username et mot de passe).
    Pour cela il semble que l'objet SmtpClient ait une propriété "Credentials".
    (Arrêtez moi si je me trompe..)
    Mais quelle nomenclature utiliser pour mettre ces informations dans la propriété Credentials ?
    *******************

    Quelqu'un à une idée ?


    [EDIT]


    En fait, le fait que je n'arrive pas à envoyer de mail à mon adresse gmail est très probablement dû au fait que j'essaye de le faire de mon entreprise qui bloque les connexions vers l'extérieur.

    Je vais tester à mon domicile.

    [/EDIT]

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Salut.

    Il est effectivement fort probable que tu sois bloqué au niveau du réseau de ton entreprise. Cependant, pour faire ton test chez toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.Credentials = new NetworkCredential("yourGmail@gmail.com", "yourGmailPassword");
    smtp.Port = 587;
    smtp.EnableSsl = true;
    Bon courage

  5. #5
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    J'avais oublié de dire que mon problème était résolu, donc merci !

    Plusieurs questions de détails cependant :



    ********************

    1. Comment a tu trouvé le port 587 ? C'est spécifique du serveur SMTP smtp.gmail.com ?

    ********************



    ********************

    2. J'essaye de m'envoyer un message depuis mon compte hotmail.
    J'ai un peu cherché sur le net, je pense que :
    le serveur SMTP est : smtp.live.com
    le port à utiliser est : 25

    Quand j'utilise ces paramètres avec :
    Ça me met que : "le serveur ne prend pas en compte les connexions sécurisées"

    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smtp.EnableSsl = false;
    Ça me met :
    Le serveur SMTP recquiert une connexion sécurisée ou le client n'était pas authentifié. La réponse du serveur était : 5.7.0 Must issue a STARTTLS command first. 10sm1295562eyd.57

    (J'ai bien vérifié les identifiants de connexion sont corrects)


    Pourquoi ça plante ?

    ********************

  6. #6
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Re.
    Comment a tu trouvé le port 587 ? C'est spécifique du serveur SMTP smtp.gmail.com ?
    => le support Google

    Pour le point 2, c'est plus bizarre... car :
    Must issue a STARTTLS command first.
    Ça implique d'utiliser la ligne :
    As-tu essayé d'ajouter la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    // ...
    smtp.Credentials = new NetworkCredential("yourHotmail@hotmail.com", "yourPassword");
    Bon courage

  7. #7
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    Cool ça fonctionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    Merci beaucoup !

    Voici donc la classe MailTool qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    using System.Net;
    using System.Net.Mail;
     
    namespace MailSender
    {
        class MailTool
        {
     
            /// <summary>
            /// Permet d'envoyer un mail
            /// </summary>
            /// <param name="expediteur">adresse mail de l'expéditeur du mail</param>
            /// <param name="destinataire">adresse mail du destinataire du mail</param>
            /// <param name="sujet">sujet du mail</param>
            /// <param name="corps">message</param>
            /// <param name="serveur">nom du serveur</param>
            /// <param name="port">numéro de port</param>
            /// <param name="username">mot de passe de messagerie</param>
            /// <param name="password">password de messagerie</param>
            public static void SendMail(string expediteur, string destinataire, string sujet, string corps, string serveur, string port, string username, string password)
            {
     
                MailAddress from = new MailAddress(expediteur);
                MailAddress to = new MailAddress(destinataire);
                MailMessage message = new MailMessage(from, to);
     
                message.Subject = sujet;
                message.Body = corps;
     
                SmtpClient smtp = new SmtpClient();
                smtp.Host = serveur; // smtp.live.com pour hotmail; smtp.gmail.com pour gmail
     
                smtp.Credentials = new NetworkCredential(username, password);
                smtp.Port = int.Parse(port); // 25 pour hotmail, 587 pour gmail
                smtp.EnableSsl = true;
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Send(message);
            }
     
            /// <summary>
            /// Permet d'envoyer un mail avec une pièce jointe
            /// </summary>
            /// <param name="expediteur">adresse mail de l'expéditeur du mail</param>
            /// <param name="destinataire">adresse mail du destinataire du mail</param>
            /// <param name="sujet">sujet du mail</param>
            /// <param name="corps">message</param>
            /// <param name="serveur">nom du serveur</param>
            /// <param name="port">numéro de port</param>
            /// <param name="username">mot de passe de messagerie</param>
            /// <param name="password">password de messagerie</param>
            /// <param name="attachment">chemin absolu de la pièce jointe</param>
            public static void SendMail(string expediteur, string destinataire, string sujet, string corps, string serveur, string port, string username, string password, string attachment)
            {
                MailAddress from = new MailAddress(expediteur);
                MailAddress to = new MailAddress(destinataire);
                MailMessage message = new MailMessage(from, to);
     
                message.Subject = sujet;
                message.Body = corps;
     
                // Gestion de la pièce jointe
                Attachment pieceJointe = new Attachment(attachment);
                message.Attachments.Add(pieceJointe);
     
                SmtpClient smtp = new SmtpClient();
                smtp.Host = serveur; // smtp.live.com pour hotmail, smtp.gmail.com pour gmail
     
                smtp.Credentials = new NetworkCredential(username, password);
                smtp.Port = int.Parse(port);  // 25 pour hotmail; 587 pour gmail
                smtp.EnableSsl = true;
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Send(message);
            }
     
     
        }
    }

  8. #8
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par eusebe19 Voir le message
    Salut.

    Il est effectivement fort probable que tu sois bloqué au niveau du réseau de ton entreprise. Cependant, pour faire ton test chez toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.Credentials = new NetworkCredential("yourGmail@gmail.com", "yourGmailPassword");
    smtp.Port = 587;
    smtp.EnableSsl = true;
    Bon courage
    C'est marrant j'ai écrit ce code aujourd'hui
    J'écris un webservice qui, une fois appelé, enverra un mail à l'appelant. Pour cela, j'utilise un compte gmail que j'ai crée pour l'occasion, mais laisser le password hardcodé me dérange, même si dans l'absolu, je crois pas que qui que ce soit s'amusera à essayer de le récupérer...
    Ca craint de le laisser ainsi ? y a t-il une façon plus élégante de contourner ce problème, à savoir ne pas laisser le password visible dans le code ?

  9. #9
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    Ça dépend par ce que tu entend par : "ne pas laisser le password visible dans le code".

    1. Perso pour l'instant, je passe mon password en variable de ma fonction, donc il n'est pas directement 'en dur' dans le code. Mais bon c'est facile de le récupérer.
    Au fait un truc qui peut peut être intéresser des personnes (on me l'a montré il y a pas longtemps) : dans les contrôles 'TextBox' des Windows Form, il y a un attribut 'UseSystemPasswordChar' à mettre à 'true' pour que quand l'utilisateur rentre sont mot de passe dans la 'TextBox', les caractères du mot de passe soient cachés.



    2. Et sinon je sais que dans mon projet, puisque la solution sur laquelle je travaille est destinée à être utiliser par l'entreprise dans laquelle je fais mon stage, je dois utiliser des fonctions de cryptage.
    Pour l'instant, j'en sais pas plus, j'ai regardé assez rapidement ce qu'il avaient fait dans leurs applications précédentes. Ça na pas l'air trop compliqué. Dès que j'en sais plus je reviendrais poster pour essayer d'expliquer ce que j'ai compris.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2012, 13h35
  2. Réponses: 17
    Dernier message: 09/05/2009, 21h54
  3. [System.Net.Mail.SmtpClient] a l'envoi d'un mail
    Par aurelien.tournier dans le forum Framework .NET
    Réponses: 5
    Dernier message: 15/02/2008, 09h06
  4. accession au namespace System.Net.Mail
    Par ninsekh dans le forum C#
    Réponses: 5
    Dernier message: 22/08/2007, 10h55
  5. [ASP.Net] System. Net. Mail
    Par beowax dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/10/2006, 09h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo