namespace POP3Client
{
  using System.IO ;
  using System.Net;
  using System.Net.Sockets ;
  //Please note that all code is copyright 2002 by William J Dean
  public class POP3client
  {
    public enum connect_state {disc,AUTHORIZATION,TRANSACTION,UPDATE}; 
    public string user;
    public string pwd;
    public string pop;
    public bool error;
    public connect_state state=connect_state.disc ;
    //borrowed from Agus Kurniawan's article:"Retrieve Mail From a POP3 Server Using C#" at http://www.codeproject.com/csharp/popapp.asp 
    private TcpClient Server;
    private NetworkStream NetStrm;
    private StreamReader RdStrm;
    private string Data;
    private byte[] szData;
    private string CRLF = " ";  
    public POP3client()
    {
      //nothing to do..just create to object  
    }
    public POP3client(string pop_server,string user_name,string password)
    {
      //put the specied server (pop_server), user (user_name) and password (password)
      //into the appropriate properties.
      pop=pop_server;
      user=user_name;
      pwd=password;
    }
    #region Utility Methods, some public, some private
    public string connect (string pop_server)
    {
      pop=pop_server;  //put the specified server into the pop property
      return(connect()); //call the connect method
    }
    public string connect()
    {
      //Initialize to the pop server. This code snipped "borrowed"
      //with some modifications...
      //from the article "Retrieve Mail From a POP3 Server Using C#" at
      //www.codeproject.com by Agus Kurniawan
      //http://www.codeproject.com/csharp/popapp.asp
      // create server with port 110
      Server = new TcpClient(pop,110);                    
      try
      {
        // initialization
        NetStrm = Server.GetStream();
        RdStrm= new StreamReader(Server.GetStream());
        //The pop session is now in the AUTHORIZATION state
        state=connect_state.AUTHORIZATION ;
        return(RdStrm.ReadLine ());
      }      
      catch(InvalidOperationException err)
      {
        return("Error: "+err.ToString());
      }
    }
    private string disconnect ()
    {
      string temp="disconnected successfully.";
      if(state !=connect_state.disc)
      {
        //close connection
        NetStrm.Close();
        RdStrm.Close();
        state=connect_state.disc ;
      }
      else
      {
        temp="Not Connected.";
      }
      return(temp);
    }
    private void issue_command(string command)
    {
      //send the command to the pop server. This code snipped "borrowed"
      //with some modifications...
      //from the article "Retrieve Mail From a POP3 Server Using C#" at
      //www.codeproject.com by Agus Kurniawan
      //http://www.codeproject.com/csharp/popapp.asp
      Data= command + CRLF;
      szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
      NetStrm.Write(szData,0,szData.Length);
    }
    private string read_single_line_response()
    {
      //read the response of the pop server. This code snipped "borrowed"
      //with some modifications...
      //from the article "Retrieve Mail From a POP3 Server Using C#" at
      //www.codeproject.com by Agus Kurniawan
      //http://www.codeproject.com/csharp/popapp.asp
      string temp;
      try
      {
        temp = RdStrm.ReadLine();
        was_pop_error(temp);        
        return(temp);