WEB开发网
开发学院WEB开发ASP.NET ASP.NET读取POP3邮件的操作 阅读

ASP.NET读取POP3邮件的操作

 2003-12-29 17:46:05 来源:WEB开发网   
核心提示: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

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 = "\r\n"; 

   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);
    }
    catch(InvalidOperationException err)
    {
     return("Error in read_single_line_response(): " + err.ToString ()) ;
    }

   }
   private string read_multi_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="";
    string szTemp;

  try
    {
     szTemp = RdStrm.ReadLine();
     was_pop_error(szTemp);    
     if(!error)
     {
    
      while(szTemp!=".")
      {
       temp += szTemp+CRLF;
       szTemp = RdStrm.ReadLine();
      }
     }
     else
     {
      temp=szTemp;
     }
     return(temp);
    }
    catch(InvalidOperationException err)
    {
     return("Error in read_multi_line_response(): " + err.ToString ());
    }
   }
   private void was_pop_error(string response)
   {
    //detect if the pop server that issued the response believes that
    //an error has occured.

  if(response.StartsWith ("-"))
    {
     //if the first character of the response is "-" then the
     //pop server has encountered an error executing the last
     //command send by the client
     error=true;
    }
    else
    {
     //success
     error=false;
    }
   }
   #endregion
   #region POP commands
   public string DELE(int msg_number)
   {
    string temp;
   
    if (state != connect_state.TRANSACTION )
    {
     //DELE is only valid when the pop session is in the TRANSACTION STATE
     temp="Connection state not = TRANSACTION";
    }
    else
    {
     issue_command("DELE " + msg_number.ToString ());
     temp=read_single_line_response();   
    }
    return(temp);
   }

   public string LIST()
   {
    string temp="";
    if (state != connect_state.TRANSACTION )
    {
     //the pop command LIST is only valid in the TRANSACTION state
     temp="Connection state not = TRANSACTION";
    }
    else
    {
     issue_command ("LIST");
     temp=read_multi_line_response();
    }
    return(temp);   
   }

   public string LIST(int msg_number)
   {
    string temp="";

  if (state != connect_state.TRANSACTION )
    {
     //the pop command LIST is only valid in the TRANSACTION state
     temp="Connection state not = TRANSACTION";
    }
    else
    {
     issue_command ("LIST " + msg_number.ToString ());
     temp=read_single_line_response(); //when the message number is supplied, expect a single line response
    }
    return(temp);

   }

   public string NOOP()
   {
    string temp;
    if (state != connect_state.TRANSACTION )
    {
     //the pop command NOOP is only valid in the TRANSACTION state
     temp="Connection state not = TRANSACTION";
    }
    else
    {
     issue_command ("NOOP");
     temp=read_single_line_response();

  }
    return(temp);

   }
   public string PASS()
   {
    string temp;
    if (state != connect_state.AUTHORIZATION)
    {
     //the pop command PASS is only valid in the AUTHORIZATION state
     temp="Connection state not = AUTHORIZATION";
    }
    else
    {
     if (pwd !=null)
     {
      issue_command ("PASS " + pwd);
      temp=read_single_line_response();

    if (!error)
      {
       //transition to the Transaction state
       state=connect_state.TRANSACTION;
      }
     }
     else
     {
      temp="No Password set.";
     }
    }
    return(temp);
   }
   public string PASS(string password)
   {
    pwd=password;  //put the supplied password into the appropriate property
    return(PASS()); //call PASS() with no arguement
   }

   public string QUIT()
   {
    //QUIT is valid in all pop states

  string temp;
    if (state !=connect_state.disc)
    {
     issue_command ("QUIT");
     temp=read_single_line_response();
     temp += CRLF + disconnect();
 
    }
    else
    {
     temp="Not Connected.";
    }
    return(temp);

   }
   public string RETR (int msg)
   {
    string temp="";
    if (state != connect_state.TRANSACTION )
    {
     //the pop command RETR is only valid in the TRANSACTION state
     temp="Connection state not = TRANSACTION";
    }
    else
    {
     // retrieve mail with number mail parameter
     issue_command ("RETR "+ msg.ToString ());
     temp=read_multi_line_response();
    }
    return(temp);

   }

   public string RSET()
   {
    string temp;
    if (state != connect_state.TRANSACTION )
    {
     //the pop command STAT is only valid in the TRANSACTION state
     temp="Connection state not = TRANSACTION";
    }
    else
    {
     issue_command("RSET");
     temp=read_single_line_response();
    }
    return(temp);

   }

   public string STAT()
   {
    string temp;
    if (state==connect_state.TRANSACTION)
    {
     issue_command("STAT");
     temp=read_single_line_response();

   return(temp);
    }
    else

  {
     //the pop command STAT is only valid in the TRANSACTION state
     return ("Connection state not = TRANSACTION");
    }
   }  

   public string USER()
   {
    string temp;
    if (state != connect_state.AUTHORIZATION)
    {
     //the pop command USER is only valid in the AUTHORIZATION state
     temp="Connection state not = AUTHORIZATION";
    }
    else
    {
     if (user !=null)
     { 
      issue_command("USER "+ user);
      temp=read_single_line_response();
     }
     else
     {  //no user has been specified
      temp="No User specified.";
     }
    }
    return(temp);
   }

   public string USER(string user_name)
   {
    user=user_name; //put the user name in the appropriate propertity
    return(USER()); //call USER with no arguements
   }
   #endregion
  }

}

Tags:ASP NET 读取

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接