ASP.NET读取POP3邮件的操作

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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 StreamReaderRdStrm;

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)

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航