- 打印本文 关闭窗口
- ASP.NET读取POP3邮件的操作
- 作者:采集员 文章来源:来源于网络 点击数: 更新时间:2005/9/10 14:20:22
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 = " ";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 = TRANS- 打印本文 关闭窗口