• 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 
        } 

    }

    申明

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

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

  • 相关阅读:
    (step4.3.8)hdu 2181(哈密顿绕行世界问题——DFS)
    两款商业拓扑发现软件siteview和ElementSentry的比较
    20岁到30岁,我拿十年做什么
    新浪微博私信,即时聊天接口研究
    “adb server is out of date. killing.... ADB server didn't ACK * failed to start daemon * ”
    【Java&Android开源库代码剖析】のandroid-smart-image-view
    dns智能解析对网站排名的影响
    SQL Server 权限管理
    objective-c 中数据类型之四 字典(NSDictionary)
    IOS总结_实现UIButton的图文混排(二)
  • 原文地址:https://www.cnblogs.com/Athrun/p/824286.html
Copyright © 2020-2023  润新知