Example #1
0
        /// <summary>
        /// Closes connection to POP3 server.
        /// </summary>
        /// <exception cref="ObjectDisposedException">Is raised when this object is disposed and this method is accessed.</exception>
        /// <exception cref="InvalidOperationException">Is raised when POP3 client is not connected.</exception>
        public override void Disconnect()
        {
            if(this.IsDisposed){
                throw new ObjectDisposedException(this.GetType().Name);
            }
            if(!this.IsConnected){
                throw new InvalidOperationException("POP3 client is not connected.");
            }

            try{
                // Send QUIT command to server.
                WriteLine("QUIT");
            }
            catch{
            }

            try{
                base.Disconnect();
            }
            catch{
            }

            m_GreetingText       = "";
            m_ApopHashKey        = "";
            m_pExtCapabilities   = new List<string>();
            m_IsUidlSupported    = false;
            if(m_pMessages != null){
                m_pMessages.Dispose();
                m_pMessages = null;
            }
            m_pAuthdUserIdentity = null;
        }
Example #2
0
        private void FillMessages()
        {
            m_pMessages = new POP3_ClientMessageCollection(this);

            /*
                First make messages info, then try to add UIDL if server supports.
            */

            /* NOTE: If reply is +OK, this is multiline respone and is terminated with '.'.
            Examples:
                C: LIST
                S: +OK 2 messages (320 octets)
                S: 1 120
                S: 2 200
                S: .
                ...
                C: LIST 3
                S: -ERR no such message, only 2 messages in maildrop
            */

            WriteLine("LIST");

            // Read first line of reply, check if it's ok.
            string line = ReadLine();
            if(line.StartsWith("+OK")){
                // Read lines while get only '.' on line itshelf.
                while(true){
                    line = ReadLine();

                    // End of data
                    if(line.Trim() == "."){
                        break;
                    }
                    else{
                        string[] no_size = line.Trim().Split(new char[]{' '});
                        m_pMessages.Add(Convert.ToInt32(no_size[1]));
                    }
                }
            }
            else{
                throw new POP3_ClientException(line);
            }

            // Try to fill messages UIDs.
            /* NOTE: If reply is +OK, this is multiline respone and is terminated with '.'.
            Examples:
                C: UIDL
                S: +OK
                S: 1 whqtswO00WBw418f9t5JxYwZ
                S: 2 QhdPYR:00WBw1Ph7x7
                S: .
                ...
                C: UIDL 3
                S: -ERR no such message
            */

            WriteLine("UIDL");

            // Read first line of reply, check if it's ok
            line = ReadLine();
            if(line.StartsWith("+OK")){
                m_IsUidlSupported = true;

                // Read lines while get only '.' on line itshelf.
                while(true){
                    line = ReadLine();

                    // End of data
                    if(line.Trim() == "."){
                        break;
                    }
                    else{
                        string[] no_uid = line.Trim().Split(new char[]{' '});
                        m_pMessages[Convert.ToInt32(no_uid[0]) - 1].SetUID(no_uid[1]);
                    }
                }
            }
            else{
                m_IsUidlSupported = false;
            }
        }