2010-03-13 2 views
2

J'essaie de lire les messages de mon compte live.com via le protocole POP3.Lecture d'un serveur POP3 avec uniquement TcpClient et StreamWriter/StreamReader

J'ai trouvé le serveur est pop3.live.com et le port si 995.

Je ne suis pas l'intention d'utiliser une bibliothèque pré-faites, j'utilise NetworkStream et StreamReader/StreamWriter pour le travail. J'ai besoin de comprendre ça. Donc, l'une des réponses données ici: Reading Email using Pop3 in C# ne sont pas utiles.

Cela fait partie d'un programme plus vaste, mais j'ai fait un petit test pour voir si cela fonctionne. De toute façon, je ne reçois rien. Voici le code que j'utilise, que je pense devrait être correct.

EDIT: ce code est ancien, veuillez vous référer au second problème de bloc résolu.

public Program() { 
    string temp = ""; 
    using(TcpClient tc = new TcpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8000))) { 
     tc.Connect("pop3.live.com",995); 
     using(NetworkStream nws = tc.GetStream()) { 
      using(StreamReader sr = new StreamReader(nws)) { 
       using(StreamWriter sw = new StreamWriter(nws)) { 
        sw.WriteLine("USER " + user); 
        sw.Flush(); 
        sw.WriteLine("PASS " + pass); 
        sw.Flush(); 
        sw.WriteLine("LIST"); 
        sw.Flush(); 
        while(temp != ".") { 
         temp += sr.ReadLine(); 
        } 
       } 
      } 
     } 
    } 
    Console.WriteLine(temp); 
} 

débogueur Visual Studio tombe constamment sur tc.Connect("pop3.live.com",995); qui jette une « Une opération a été tentée sur un réseau injoignable 65.55.172.253:995 » d'erreur. Donc, j'envoie du port 8000 sur ma machine au port 995, le port POP3 de hotmail. Et je ne reçois rien, et je n'ai plus d'idées. Deuxième bloc: Le problème était apparemment que je n'avais pas écrit la commande Quitter.

Le code:

public Program() { 
    string str = string.Empty; 
    string strTemp = string.Empty; 
    using(TcpClient tc = new TcpClient()) { 
     tc.Connect("pop3.live.com",995); 
     using(SslStream sl = new SslStream(tc.GetStream())) { 
      sl.AuthenticateAsClient("pop3.live.com"); 
      using(StreamReader sr = new StreamReader(sl)) { 
       using(StreamWriter sw = new StreamWriter(sl)) { 
        sw.WriteLine("USER " + user); 
        sw.Flush(); 
        sw.WriteLine("PASS " + pass); 
        sw.Flush(); 
        sw.WriteLine("LIST"); 
        sw.Flush(); 
        sw.WriteLine("QUIT "); 
        sw.Flush(); 

        while((strTemp = sr.ReadLine()) != null) { 
         if(strTemp == "." || strTemp.IndexOf("-ERR") != -1) { 
          break; 
         } 
         str += strTemp; 
        } 
       } 
      } 
     } 
    } 
    Console.WriteLine(str); 
} 
+0

Cela ne fait-il pas juste une boucle infinie? Je doute que le serveur répondra à toutes les commandes que vous envoyez avec un seul point. Ça parlera probablement un peu plus. – svinto

+0

Le point est le moyen standard POP3 pour mettre fin à une conversation. Je demande la liste complète de mes mails. Il livrera et quand fait, envoie un point pour indiquer ce fait. C'est pourquoi je continue d'écouter jusqu'à ce qu'on soit reçu. – KdgDev

Répondre

0

Qu'advient-il si vous affichez le trafic réseau à l'aide Wireshark? Est-ce qu'il envoie quoi que ce soit? Editer: Je ne peux pas me connecter via telnet à pop3.live.com sur ce port non plus. Avez-vous réussi à vous connecter via un client de messagerie pop3?

+0

Bonne idée. Vérification que maintenant – KdgDev

+0

nouveau développement dans les tentatives – KdgDev

+0

Content de l'avoir trié! –

Questions connexes