ASP.NET读取POP3邮件的操作

来源:互联网 发布:电脑蓝牙串口测试软件 编辑:程序博客网 时间:2024/05/21 14:46
<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>
原创粉丝点击