利用POP3收取邮件

作者:网际浪子

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

namespace 利用POP3协议收取电子邮件
{
    /// <summary> 
    /// Class1 的摘要说明。 
    /// </summary> 
    class Class1
    {
        /// <summary> 
        /// 应用程序的主入口点。 
        /// </summary> 
        private static TcpClient tpServer;
        private static byte[] byData;
        //设定一个字节数组,用以存放向POP3服务器传送的命令 
        private static string CRLF = "\r\n";
        //定义回车换行符 
        private static string sRec;
        //定义一个字符串,用以存放从POP3服务器反馈数据 
        private static string sData;
        //定义一个字符串,用以存放向POP3服务器传送的命令字符串 
        private static NetworkStream nsStream;
        private static StreamReader rdStream;

        [STAThread]
        static void Main(string[] args)
        {
            if (LoadPOP("pop.21cn.com", "majinhu", "123456"))
            {
                sData = "RETR 1" + CRLF;
                //定义获取帐户中邮件数目和占用空间的命令 
                byData = System.Text.Encoding.Default.GetBytes(sData.ToCharArray());
                nsStream.Write(byData, 0, byData.Length);
                //向POP3服务器传送获取帐户中邮件数目和占用空间的命令 
                sRec = rdStream.ReadLine();
                //接收服务器反馈的数据 
                /* 
                以下代码是收取帐户中的第一封邮件,并提取数据 
               */
                bool strBody = false;
                string[] arrRet = new string[6];
                string[] arrTemp;
                if (sRec != "-")
                {
                    while (sRec != ".")
                    {
                        arrTemp = sRec.Split(":".ToCharArray());
                        if (sRec == "")
                            strBody = true;
                        if (arrTemp[0] == "Date")
                            arrRet[1] = arrTemp[1];
                        if (arrTemp[0] == "From")
                            arrRet[2] = arrTemp[1];
                        if (arrTemp[0] == "To")
                            arrRet[3] = arrTemp[1];
                        if (arrTemp[0] == "Subject")
                            arrRet[4] = arrTemp[1];
                        if (strBody)
                            arrRet[5] = arrRet[5] + sRec;
                        sRec = rdStream.ReadLine();
                    }
                }
                Console.WriteLine("发送时间:" + arrRet[1]);
                //显示邮件发送时间信息 
                Console.WriteLine("发送者:" + arrRet[2]);
                //显示发信人 
                Console.WriteLine("接收者:" + arrRet[3]);
                //显示目的地址 
                Console.WriteLine("主题:" + arrRet[4]);
                //显示邮件主题 
                Console.WriteLine("内容:" + arrRet[5]);
            }
            //显示邮件内容 
            // 
            // TODO: 在此处添加代码以启动应用程序 
            // 
        }

        public static bool LoadPOP(string POPServer, string POPUser, string POPPsw)
        {
            string sPOPServer = POPServer;
            string sPOPUser = POPUser;
            string sPOPPass = POPPsw;
            try
            {
                tpServer = new TcpClient(sPOPServer, 110);
                //和POP3服务器的110端口号建立TCP连接 
            }
            catch
            {
                Console.WriteLine("无法和指定的POP3服务器建立连接!");
                return false;
            }
            nsStream = tpServer.GetStream();
            //获取客户机和服务器会话的数据流 
            rdStream = new StreamReader(tpServer.GetStream());
            sRec = rdStream.ReadLine();
            sData = "USER " + sPOPUser + CRLF;
            //定义向POP3服务器传送帐户对应的命令行 
            byData = System.Text.Encoding.Default.GetBytes(sData.ToCharArray());
            nsStream.Write(byData, 0, byData.Length);
            //向POP3服务器传送帐户 
            sRec = rdStream.ReadLine();
            //接收POP3服务器反馈数据 
            Console.WriteLine("向POP3服务器传送帐户后,服务器返回的信息:" + sRec);
            string[] sUserString = sRec.Split(" ".ToCharArray());
            if (sUserString[0] == "-ERR")
            {
                Console.WriteLine("该POP3服务器中没有此帐户!");
                return false;
            }

            sData = "PASS " + sPOPPass + CRLF;
            //定义向POP3服务器传送帐户口令对应的命令行 
            byData = System.Text.Encoding.Default.GetBytes(sData.ToCharArray());
            nsStream.Write(byData, 0, byData.Length);
            //向POP3服务器传送帐户对应口令 
            sRec = rdStream.ReadLine();
            //接收POP3服务器反馈数据 
            Console.WriteLine("向POP3服务器传送帐户口令后,服务器返回的信息:" + sRec);
            string[] sPassString = sRec.Split(" ".ToCharArray());
            if (sPassString[0] == "-ERR")
            {
                Console.WriteLine("帐户对应的口令有误!");
                return false;
            }
            return true;
        }
    }
}
Powered by DvNews.net
来源:uncj.net
阅读:141 次
日期:2003-6-30
Contributors: FHL