2010-03-13 3 views
2

POP3 프로토콜을 통해 live.com 계정에서 메일을 읽으려고합니다.TcpClient 및 StreamWriter/StreamReader 만 사용하여 POP3 서버 읽기

내가 발견 한 서버 pop3.live.com와 포트 I, 나는 위해는 NetworkStream과에서는 StreamReader/StreamWriter를 사용하고 미리 만들어진 라이브러리를 사용하여 계획하고 있지 않다 995

경우입니다 작업. 이걸 알아 내야 해. 그래서, 여기에 주어진 대답 중 하나는 Reading Email using Pop3 in C#은 유용하지 않습니다.

이 프로그램은 더 큰 프로그램의 일부이지만 작동하는지 확인하기 위해 작은 테스트를 거쳤습니다. 어쨌든, 나는 아무것도 얻지 못하고있다. 다음은 내가 사용하고있는 코드입니다. 올바른 것이어야합니다.

편집 :이 코드는 오래된 것입니다. 해결 된 두 번째 블록 문제를 참조하십시오.

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); 
} 

비주얼 스튜디오 디버거는 지속적으로 오류에 "연결할 수없는 네트워크 65.55.172.253:995에 시도 된 소켓 작업"을 던졌습니다 tc.Connect("pop3.live.com",995); 이상 떨어진다.

내 컴퓨터의 포트 8000에서 포트 995 인 hotmail pop3 포트로 보내고 있습니다. 그리고 나는 아무 것도 얻지 못하고 아이디어가 없습니다.


두 번째 블록 : 분명히 quit 명령을 쓰지 않은 것이 문제였습니다.

강령 :

당신은 와이어 샤크를 사용하여 네트워크 트래픽을 볼 경우 어떻게됩니까
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

그냥 무한 루프를 만드시겠습니까? 서버가 당신이 보내고있는 모든 명령어에 대해 하나의 점으로 답할 것 같지 않습니다. 아마 조금 더 말할 것입니다. – svinto

+0

점은 대화를 끝내기위한 POP3 표준 방법입니다. 나는 나의 우편물의 전체 목록을 요구하고있다. 그것은 전달할 것이고, 끝나면 사실을 나타내는 점을 보냅니다. 그래서 내가 듣기 전까지 계속 듣습니다. – KdgDev

답변

0

? 전혀 보내지 않았습니까?

편집 : 텔넷을 통해 해당 포트의 pop3.live.com에 연결할 수 없습니다. 당신은 성공적으로 pop3 이메일 클라이언트를 통해 성공적으로 연결 했습니까?

+0

좋은 아이디어. 지금 확인 중입니다 – KdgDev

+0

시도가 새로운 발전 – KdgDev

+0

다행 이군요. –