惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
有赞技术团队
有赞技术团队
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
MyScale Blog
MyScale Blog
博客园_首页
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
罗磊的独立博客

博客园 - .net

ASP.NET 验证机制 最佳ASP.NET编程习惯 ASP.NET中的事务处理和异常处理 ASP.NET图象处理详解 在网页中动态的生成一个图片 ASP.NET上传文件的实例 - .net - 博客园 .NET 数据访问架构指南二 .NET 数据访问架构指南 用ASP.NET上传图片并生成带版权信息的缩略图 - .net - 博客园 ASP.NET编程中的十大技巧 login.aspx xml 验正 数据库连接字在Web.config里的用法 ASP.NET 中数据库操作初步 完整的网站间共享数据的WebService 用asp.net画饼图(可用于各种投票程序) 初探ERP的数据库框架 .NET组件和COM组件之间的相互操作 C#下实现动态系统托盘图标 用动态菜单增强.NET应用程序
ASP.NET读取POP3邮件的操作
.net · 2004-02-10 · via 博客园 - .net

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
    }