ASP.NET读取POP3邮件的操作

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

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
  }

} <script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
个人分类: .net
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭