Реализация протокола pop. При попытке реализовать такие команды, как STAT и LIST программа зависает - C#
Формулировка задачи:
Здравствуйте! Пытаюсь создать простого почтового клиента, используя методы класса TcpClient. Получилось реализовать чтение одного письма согласно следующему коду:
Но при попытке реализовать такие команды, как STAT и LIST программа зависает. Подозреваю, что проблема в цикле чтения. Для STAT использовал в качестве признака конца строки символы \r\n (т. е. strTemp = "\r\n"), а для LIST - ".\r\n". Подскажите, как исправить? Заранее спасибо!
// create an instance of TcpClient
TcpClient tcpclient = new TcpClient();
// HOST NAME POP SERVER and gmail uses port number 995 for POP
tcpclient.Connect("pop.gmail.com", 995);
// This is Secure Stream // opened the connection between client and POP Server
System.Net.Security.SslStream sslstream = new SslStream(tcpclient.GetStream());
// authenticate as client
sslstream.AuthenticateAsClient("pop.gmail.com");
//bool flag = sslstream.IsAuthenticated; // check flag
// Asssigned the writer to stream
System.IO.StreamWriter sw = new StreamWriter(sslstream);
// Assigned reader to stream
System.IO.StreamReader reader = new StreamReader(sslstream);
// refer POP rfc command, there very few around 6-9 command
sw.WriteLine("USER [email]removed@mail.ru[/email]");
// sent to server
sw.Flush();
sw.WriteLine("PASS my_pass");
sw.Flush();
// this will retrive your first email
sw.WriteLine("RETR 1");
sw.Flush();
string str = string.Empty;
string strTemp = string.Empty;
while ((strTemp = reader.ReadLine()) != null)
{
// find the . character in line
if (strTemp == ".")
{
break;
}
if (strTemp.IndexOf("-ERR") != -1)
{
break;
}
str += strTemp;
}
// close the connection
sw.WriteLine("QUIT");
sw.Flush();
richTextBox2.Text = str;Решение задачи: «Реализация протокола pop. При попытке реализовать такие команды, как STAT и LIST программа зависает»
textual
Листинг программы
// close the connection
sw.WriteLine("QUIT");
sw.Flush();