ASP.NET读取POP3邮件的操作

//ASP.NET读取POP3邮件的操作
//
//--------------------------------------------------------------------------------

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
 }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值