2011-08-30 4 views
1

여기에 제안 된 항목에서 필자가 찾은 내용을 찾지 못했기 때문에 pop3 용 자체 라이브러리에서 작업하고 있습니다. 내 문제는 특정 지점 (일반적으로 텍스트의 링크)까지만 줄을 읽을 수있는 메시지를 열 때 멈추고 반복되지만 충돌하지 않는 것입니다. 코드는 다음과 같습니다 다른 쪽 끝에서 서비스가 CRLF로 끝나는 라인을 반환POP3를 사용하는 TcpClient 응답 스트림은 한 줄 이상 읽지 않습니다.

Data = "RETR 1" + CRLF; 
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); 
NetStrm.Write(szData, 0, szData.Length); 
txtLog.Text += RdStrm.ReadLine() + CRLF; 
for (int i = 0; i < 33; i++) 
{ 

    txtLog.Text += RdStrm.ReadLine() + CRLF; 
} 


string szTemp; 
szTemp = RdStrm.ReadLine(); 
// here it's supposed to start reading the actual message 
while(szTemp != "-") 
    { 

     txtLog.Text += szTemp + CRLF; 
     szTemp = RdStrm.ReadLine(); 

    } 
+0

제목에 "C#"을 붙일 필요가 없습니다. 그것이 바로 태그입니다. –

+0

문제는 TcpClient가 아닌 프로토콜을 구현하는 방법과 관련이 있습니다. 데이터가 그럴 가능성이 가장 큰 이유는 단순히 고객에게 전송되지 않는다는 것입니다. 또한 TcpClient는 NetworkStream을 반환하고 NetworkStream에는 코드에 표시되는 ReadLine 메서드가 없습니다. 한 번 더 관련이 있지만 질문에 반영되지 않습니다. 최선의 조언은 다음과 같습니다. 코드를주의 깊게 확인하고 프로토콜 구현을 디버깅하십시오. –

+0

@zespri 1, 전체 코드는 다음을 포함합니다. RdStrm = new StreamReader (Server.GetStream()); 그 while 루프를 제외하고 나는 모든 명령으로부터 응답을 얻고있다. for 루프를 수행하면 전자 메일의 하이퍼 링크 앞에 모든 정보가 표시됩니다. 그래서 구현이 모두 훌륭합니다. 그냥 스트림에서 읽는 것만으로 문제가되는 것 같습니다. – Darko

답변

1
Match reg1 = Regex.Match(ifOk, "OK(.*)", RegexOptions.IgnoreCase); 

if (reg1.Success) 
{ 
    txtLog.Text += "Ready To Start!\r\n"; 

    Data = "USER XXXX" + CRLF; 
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); 
    NetStrm.Write(szData, 0, szData.Length); 
    txtLog.Text += RdStrm.ReadLine() + CRLF; 

    Data = "PASS XXXX" + CRLF; 
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); 
    NetStrm.Write(szData, 0, szData.Length); 
    txtLog.Text += RdStrm.ReadLine() + CRLF; 

    Data = "STAT" + CRLF; 
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); 
    NetStrm.Write(szData, 0, szData.Length); 
    txtLog.Text += RdStrm.ReadLine() + CRLF + CRLF + CRLF + CRLF + CRLF; 

    Data = "RETR 1" + CRLF; 
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); 
    NetStrm.Write(szData, 0, szData.Length); 
    txtLog.Text += RdStrm.ReadLine() + CRLF; 

    string szTemp; 

    szTemp = RdStrm.ReadLine(); 

    // POP3 uses . as the end of a message 
    while(szTemp != ".") 
    {     
     txtLog.Text += szTemp + CRLF; 
     szTemp = RdStrm.ReadLine();            
    }    
} 

은 보인다. 모두에게 감사드립니다. 이제는 완벽하게 작동합니다.

0

경우, 다음의 Readline에서 얻을 줄은 끝에 CR이있을 것이다. 이렇게 반환 된 문자열은 항상! = "-"입니다. 인터넷이 lib 디렉토리를 수정, 좋은, 오픈 소스에 대한 요구에 쉽게 좋아하는 내가 다음에 무엇을 할 거 야, 그래서 그것을 정착

관련 문제