2011-11-22 1 views
1

pop3.live.com에 연결할 때 연결 상태가 좋으며 내가 갖고있는 메시지의 양과 파일 크기가 표시되지만 "RETR"을 사용하여 메시지를 가져 와서 콘솔 응용 프로그램에 표시하려고하면 아무 것도 표시되지 않습니다. 여기 pop3에서 메일에 액세스하려고하면 Retrieve 명령이 작동하지 않는 것 같습니다. C#

난 당신이 검색 할 메시지를 지정해야합니다, 지금까지

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 " + _username); 
          sw.Flush(); 
          sw.WriteLine("PASS "+ _password); 
          sw.Flush(); 
          sw.WriteLine("LIST"); 
          sw.Flush(); 
          sw.WriteLine("RETR"); 
          sw.Flush(); 
          sw.WriteLine("QUIT "); 
          sw.Flush(); 

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

은 당신이 결과를 읽는 마친 * 후'QUIT' *을 퍼팅 시도 유무 : 예를 들어

? 당신이 이미 "잘 했어, 안녕"이라고 말했기 때문에 그것이 결과를 보내는 것을 방해하지 않기로 결정한 것처럼 보입니다. –

+0

자신과 우리를 호의적으로 만들 수 있고 서버의 응답 줄을 나열 할 수 있습니다. 출력 및 입력을 로그에 혼합하는 것이 더 좋습니다. 첫째, 모든 명령을 보낸 후에 만 ​​디버깅을하는 것이 좋습니다. 둘째, 모든 명령을 보낸 후에 만 ​​모든 것을 읽는 것이 필요하지 않습니다. 일부 서버는 PIPELINING을 지원하지 않습니다. –

답변

1

먼저 메시지 번호를 나열하는 LIST 명령을 사용해야합니다. 그런 다음 이전 목록의 단일 메시지 x 호와 함 2 하나 이상의 RETR 명령을 _ 행하십시오. 메시지 번호가 반드시 1부터 시작하지는 않습니다! 이 문제를 디버깅하는 방법에 대한 질문에 대한 내 의견도 참조하십시오.

LIST 
+OK 2 messages (4095) 
1 710 
2 3385 
. 
RETR 1 
+OK 710 octets 
Return-Path: <[email protected]> 
... 
1

RETR과 함께하는 것입니다. 숫자가없는 RETRPOP3 specification에 따라 지원되지 않습니다.

+0

iv "RETR 1" "RETR1" "RETR"+1 요법에서 그런 식으로 많은 기능을 시도했지만 여전히 아무것도 찾지 못했습니다 –

+0

끝에 \ r \ n도 추가하려고했습니다. –

관련 문제