会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
技术文档 > C#.Net
ASP.NET读取POP3邮件的操作
发表日期:2003-06-05 00:00:00作者:C 出处:  

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

 }

}

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00449