Wilson Chan - 2004-02-24

I found that there is a problem with reading buffer from pop3 server. I modify the POPClient class to make it work properly:

        /// <summary>
        /// get messages info
        /// </summary>
        /// <param name="messageNumber">message number</param>
        /// <returns>Message object</returns>
        public Message GetMessageHeader(int messageNumber)
        {
            writer.WriteLine("TOP "+messageNumber+" 0");
            //string tmp=Receive();
            //delete +OK (3 chars) and create message
            Message message=new Message(ReceiveContent(-1).Substring(3),true);
            return message;
        }

        /// <summary>
        /// read stream content
        /// </summary>
        /// <param name="contentLength">length of content to read</param>
        /// <returns>content</returns>
        private string ReceiveContent(int contentLength)
        {
            //            char []temp=new char[contentLength];
            //            reader.ReadBlock(temp,0,contentLength);
            //            response=new string(temp);
            //            reader.ReadLine();
            //            return new Message(response);
            string response=null;
            StringBuilder builder = new StringBuilder();
            builder.EnsureCapacity(contentLength);
            //reader.ReadToEnd();
            response = reader.ReadLine();
            int intLines=0;
            while (response.IndexOf(".")!=0)// && len<contentLength)
            {
                builder.Append(response + "\r\n");
                intLines+=1;
                response = reader.ReadLine();
                if((intLines % 50)==0) //make an interval pause to ensure response from server
                    Thread.Sleep(1);
            }

            return builder.ToString();

        }

        /// <summary>
        /// get message info
        /// </summary>
        /// <param name="number">message number on server</param>
        /// <returns>Message object</returns>
        public Message GetMessage(int number)
        {           
            writer.WriteLine("RETR " + number);

            string response=reader.ReadLine();
            int messageSize=0;

            if(GetCommand(response)!=strOK)           
                return null;

            try
            {
                messageSize=Convert.ToInt32(GetParameters(response)[0]);
            }
            catch(Exception e)
            {
                Utility.LogError("GetMessage():"+e.Message);
                return null;
            }

//            char []temp=new char[messageSize];
//            reader.ReadBlock(temp,0,messageSize);
//            response=new string(temp);
//            reader.ReadLine();
//            return new Message(response);
//            StringBuilder builder = new StringBuilder();
//            builder.EnsureCapacity messageSize;
//            response = reader.ReadLine();
//            int len=0;
//            while (response.IndexOf(".")!=0 && len<messageSize)
//            {
//                builder.Append(response + "\r\n");
//                len+=response.Length;
//                response = reader.ReadLine();
//            }
            return new Message(ReceiveContent(messageSize),false);
        }