ASP.NET读取POP3邮件的操作

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 
    } 

}

申明

非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

博文欢迎转载,但请给出原文连接。

原文地址:https://www.cnblogs.com/Athrun/p/824286.html