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 :

application me permettant de charger mes mail en pop3


Sujet :

C#

  1. #1
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut application me permettant de charger mes mail en pop3
    bonjour

    je débutent en c# et je voudrait faire une application me permettant de charger mes mail en pop3

    donc j'ai trouver un tutoriel sur http://lgmorand.developpez.com/dotnet/mail/#L2

    et quand j'utilise ce code :
    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
    private void cmd_valider_Click(object sender, EventArgs e)
            {
                TcpClient monSocket;
                monSocket = new TcpClient(cb_popserveur.Text, 995); // 110 est le port par défaut pour les serveurs POP3
     
                NetworkStream monStream;
     
     
                // initialisation du Stream
                monStream = monSocket.GetStream();
     
                // création du streamreader
                StreamReader monStreamReader;
                monStreamReader = new StreamReader(monStream);
     
     
                // Préparation de la commande USER avec le nom d'utilisateur
                String Commande = "user " + txt_login.Text + "\r\n";
     
                // Envoi de la commande au serveur
                Byte[] bCommande = System.Text.ASCIIEncoding.ASCII.GetBytes(Commande);
                monStream.Write(bCommande, 0, bCommande.Length);
     
     
                // Préparation de la commande PASS avec le mot de passe utilisateur
                String Commande = "pass " + txt_pwd.text + "\r\n";
     
                // Envoi de la commande au serveur
                Byte[] bCommande = System.Text.ASCIIEncoding.ASCII.GetBytes(Commande);
                monStream.Write(bCommande, 0, bCommande.Length);
     
     
            }
    ca me met les erreur suivante

    Erreur 3 'System.Windows.Forms.TextBox' ne contient pas de définition pour 'text' C:\Documents and Settings\stageinfo\Mes documents\Visual Studio 2005\Projects\POP3\POP3\Form1.cs 63 49 POP3
    Erreur 2 Une variable locale nommée 'Commande' est déjà définie dans cette portée C:\Documents and Settings\stageinfo\Mes documents\Visual Studio 2005\Projects\POP3\POP3\Form1.cs 63 20 POP3
    Erreur 4 Une variable locale nommée 'bCommande' est déjà définie dans cette portée C:\Documents and Settings\stageinfo\Mes documents\Visual Studio 2005\Projects\POP3\POP3\Form1.cs 66 20 POP3
    cordialement

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

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

    Première erreur, de la casse (il faut un 'T' majuscule) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String Commande = "pass " + txt_pwd.Text + "\r\n";
    Deuxième erreur, tu définis des variables deux fois (Commande et bCommande). Tu peux changer leur nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Préparation de la commande USER avec le nom d'utilisateur
    String commandeUser = "user " + txt_login.Text + "\r\n";
     
    // Envoi de la commande au serveur
    Byte[] bCommandeUser = System.Text.ASCIIEncoding.ASCII.GetBytes(commandeUser);
    monStream.Write(bCommandeUser, 0, bCommandeUser.Length);
     
     
    // Préparation de la commande PASS avec le mot de passe utilisateur
    String commandePass = "pass " + txt_pwd.Text + "\r\n";
     
    // Envoi de la commande au serveur
    Byte[] bCommandePass = System.Text.ASCIIEncoding.ASCII.GetBytes(commandePass);
    monStream.Write(bCommandePass, 0, bCommandePass.Length);
    Rien de bien sorcier .

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Bonjour,

    Utilises un espace de nom plus élaboré comme System.Net.
    Pourquoi utiliser encore les sockets !

    Cordialement;

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut
    Utilises un espace de nom plus élaboré comme System.Net.
    Pourquoi utiliser encore les sockets !
    le framework.net ne dispose pas d'objet gérant les connections POP3 il me semble

    Rien de bien sorcier .
    j'ai installer et utiliser visual c# pour la première fois il y a 4h , avant je faisait du vb.net , il était beaucoup moins sensible a la casse ^^

    bref

    donc j'ai continuer mon petit truc qui est ci-dessous

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
            private void Form1_Load(object sender, EventArgs e) {
                cb_popserveur.Items.Add("pop.gmail.com");
                cb_popserveur.Items.Add("pop3.live.com");
                cb_popserveur.Items.Add(""); 
            }
     
            private void cmd_valider_Click(object sender, EventArgs e)
            {
                try {
                    String Commande = "user " + txt_login.Text + "\r\n";
                    Tcp = new TcpClient(cb_popserveur.Text, 995);
                    lvMails.Items.Clear();
                    lblStatus.Text = "Try to Connect ...";
     
                    Tcp = new TcpClient(cb_popserveur.Text, 995);
                    ns = Tcp.GetStream();
                    sr = new StreamReader(ns);
                   // WriteConsole();
                    lblStatus.Text = "Connecté...";
                    EnvoiCommande(Commande);
                  //  WriteConsole();
                    Commande = "pass " + txt_pwd.Text + "\r\n";
                    EnvoiCommande(Commande);
                  //  WriteConsole();
                    inbMsg = NombreDeMessages(1);
                    lblStatus.Text = "Message non lus (" + inbMsg.ToString() + ")";
                    RecupereListeMessages();
                }
                catch (Exception ex){
                    //System.Windows.POP3apps.MessageBox.Show(ex);
                    MessageBox.Show(ex.Message); }
            }
            private int NombreDeMessages(int mode, params int[] index) {
                String sOutStream = "";
                if (mode == 1)
                    sOutStream = "stat\r\n";
                else if (mode == 2)
                    sOutStream = "list " + index[0].ToString() + "\r\n";
                String[] tempS ={ "0" };
                try{
                    EnvoiCommande(sOutStream);
                    String tempLog = sr.ReadLine();
                    tempS = tempLog.Split(' '); }
                catch (Exception e){
                    MessageBox.Show("erreur" + e);}
                return int.Parse(tempS[1]); }
     
              private void RecupereListeMessages()
              {
                  for (int i = 1; i <= inbMsg; i++)
                  {
                      lblStatus.Text = "Retrieve Message " + i.ToString() + " ...";
                      int intSizeMsg = NombreDeMessages(2, i);
                      EnvoiCommande("retr " + i.ToString() + "\r\n");
                      parseMail(intSizeMsg);
                  }
              }
     
     
              private void parseMail(int size)
              {
                  string szTemp = sr.ReadLine();
                  string szSubject = "";
                  string szDate = "";
                  int temp;
     
                  if (szTemp != "-")
                  {
                      szTemp = sr.ReadLine();
                      string szSender;
                      if ((temp = szTemp.IndexOf("<")) != -1)
                          szSender = szTemp.Substring(temp);
                      else
                          szSender = "Inconnu||Erreur";
     
                      System.Windows.Forms.ListViewItem curItem = lvMails.Items.Add("");
                      szTemp = sr.ReadLine();
                      while (szTemp != ".")
                      {
                          if (szTemp.IndexOf("Date:") != -1)
                              szDate = szTemp.Substring(5, szTemp.Length - 5);
                          if (szTemp.IndexOf("Subject:") != -1)
                              szSubject = szTemp.Substring(8, szTemp.Length - 8);
                          szTemp = sr.ReadLine();
                      }
                      curItem.SubItems.Add(szSender.Replace("<", "").Replace(">", ""));
                      curItem.SubItems.Add(szSubject);
                      curItem.SubItems.Add(Convert.ToDateTime(szDate).ToShortDateString());
                      curItem.SubItems.Add(Convert.ToDateTime(szDate).ToShortTimeString());
                  }
              }
     
              private void RecupereMail(int NumMail)
              {
                  EnvoiCommande("retr " + NumMail.ToString() + "\r\n");
                  string szTemp = sr.ReadLine();
                  while (szTemp != ".")// fin du mail
                  {
                      if (szTemp.Length != 0)// on ne travail par sur les lignes vides (sauts de ligne)
                      {
                          // on ajoute la ligne dans la textbox d'affichage du mail.
                          // Si le dernier caractère est le symbole "=" alors cela représente un saut de ligne que l'on doit rajouter.
                          if (szTemp[szTemp.Length - 1].Equals('='))
                              txtDetails.AppendText(szTemp.Substring(0, szTemp.Length - 1));
                          else txtDetails.AppendText(szTemp + "\r\n");
                      }
                      szTemp = sr.ReadLine(); // lit la ligne suivante
                  }
              }
              private void EnvoiCommande(String bToSend)
              {
                  Byte[] bOutStream = System.Text.ASCIIEncoding.ASCII.GetBytes(bToSend);
                  ns.Write(bOutStream, 0, bOutStream.Length);
              }
    sur ma form j'ai une textbox pour le login , une pour le mot de passe et une combobox pour le serveur pop , ca avait l'air de plutôt bien marché jusqu'à ce que je lance la commande pop pour récupérer les mail

    ca me met l'erreur suivante qui est en piéce jointe

    je ne suis pas sur mais je pense que ca a un rapport avec le certificat ssl

    mais je ne sais pas comment le valider en c#
    Images attachées Images attachées  

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Utilise le namespace System.Net.Mail, c'est plus simple.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    climail cli = new System.Net.Mail.SmtpClient(host, port);
    Est ce que ce n'est pas ce que tu veux redevelopper ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Bin SMTP c'est pour l'envoi des mails vers un serveur SMTP distant.
    POP3, c'est pour la récupérarion des mails depuis un serveur POP3, et grâce à une authentification login/mdp.

    Et en effet (j'avais déjà cherché auparavant), le .NET ne gère pas le POP3 ce qui est regrettable. Ni l'IMAP d'ailleurs il me semble.

    Du coup on est obligé de passer par des trucs plus bas niveau (socket), et d'implémenter la RFC soi même , ou bien d'utiliser quelque chose fait par d'autres
    (ceci dit, c'était valable pour le fx 3.0, j'ai pas regardé pour le 3.5 ni le 4, donc avec un peu de chance...).
    EDIT: non, toujours pas...


    Si tu dit que c'est une erreur de SSL, essaye de regarder du coté de la class SSLStream (http://msdn.microsoft.com/en-us/libr...sslstream.aspx).
    (Nottament la partie : "creating a TcpClient that uses the SslStream class to communicate with a server")

    Quand à est-ce que c'est vraiment un problème de SSL, on sait juste que l'hôte distant a fermé la connexion, mais on ne sais pas vraiment pourquoi (protocol POP3 on respecté, erreur réseau, délai trop long...)

    As-tu essayé sur un serveur POP3 non-SSL ?

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Il se peut que le problème ne soit pas avec ton client que tu developpes,
    Essaie de faire un telnet sur le serveur pop3 que tu veux contacter pour voir si ca marche !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut
    j'ai un petit contre temps sur un projet plus urgent donc je vais mettre tout ca de coté et voir ca plus tard ,

    je ne met pas résolu car je vais y revenir


    cordialement

  9. #9
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Tiens nous au courant alors

Discussions similaires

  1. OUTLOOK 2003 : Mes mails yahoo arrivent identifiés comme "
    Par Richard_ducati dans le forum Outlook
    Réponses: 1
    Dernier message: 17/09/2007, 12h12
  2. [Mail] Mes mails ne passent pas en HTML
    Par WEBANNONCE dans le forum Langage
    Réponses: 2
    Dernier message: 08/09/2006, 16h41
  3. [VB]recuperer le contenu de mes mails
    Par mick84m dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/03/2006, 11h07
  4. [Mail] mes mails n'arrivent pas
    Par skybuck dans le forum Langage
    Réponses: 9
    Dernier message: 08/10/2005, 21h09
  5. Réponses: 9
    Dernier message: 24/05/2003, 10h25

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