一个简单易懂的c#收邮件程序



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;

using System.Net.Sockets;

using System.IO;

namespace ReadMail
{
    public partial class Form1 : Form
    {
        private string pop3Server;
        private TcpClient tcpClient;
        private NetworkStream networkStream;
        private StreamReader sr;
        private StreamWriter sw;
        public Form1()
        {
            InitializeComponent();
        }
         //单击建立连接按钮触发的事件
        private void buttonConnect_Click(object sender, EventArgs e)        
        {
            //设置鼠标光标为等待状态
            Cursor.Current = Cursors.WaitCursor;            
            try            
            {
                int index = textBoxUser.Text.IndexOf('@');
                //大部分pop3服务器都加前缀pop3.,这里仅获取这种服务器                
                //对不以pop3.为前缀的这个例子未进行处理
                pop3Server = "pop3." + textBoxUser.Text.Substring(index + 1);               
                //建立与POP3服务器的连接,使用默认端口110                
                tcpClient = new TcpClient(pop3Server, 110);
                listBoxStatus.Items.Add("与pop3服务器连接成功");            
            }            
            catch           
            {
                MessageBox.Show("与服务器连接失败");
                return;            
            }
            string str;
            listBoxStatus.Items.Clear();
            //获取 Networkstream对象,以便通过建立好的连接发送和接收数据            
            networkStream = tcpClient.GetStream();
            //得到读对象,并查找字节顺序标记,防止显示乱码            
            sr = new StreamReader(networkStream);            
            //得到写对象
            sw = new StreamWriter(networkStream);           
            //读取服务器回送的连接信息
            if (ReadDataFromServer() == null)
                return;            
            //向服务器发送用户名,请求确认
            if (SendDataToServer("USER " + textBoxUser.Text) == false)
                return;            
            if (ReadDataFromServer() == null)
                return;            
            //向服务器发送密码,请求确认
            if (SendDataToServer("PASS " + textBoxPassword.Text) == false)
                return;//5~1-a-s-p-x
            if (ReadDataFromServer() == null)
                return;
            //向服务器发送STAT命令,请求获取邮件总数和总字节数            
            if (SendDataToServer("LIST") == false)
                return;            
            if ((str = ReadDataFromServer()) == null)
                return;            
            string[] splitString = str.Split(' ');            
            //从字符串中取子串获取邮件总数
            int count = int.Parse(splitString[1]);            
            //判断邮箱中是否有邮件            
            if (count > 0)            
            {
                //设置对应状态信息
                buttonRead.Enabled = true;               
                buttonDelete.Enabled = true;                
                listBoxOperation.Items.Clear();
                groupBoxOperation.Text = "信箱中共有 " + splitString[1] + " 封邮件";
                //向邮件列表框中添加邮件
                for (int i = 0; i < count; i++)                
                {
                    if ((str = ReadDataFromServer()) == null)
                        return;                    
                    splitString = str.Split(' ');
                    listBoxOperation.Items.Add(string.Format("第{0}封邮件,{1}字节", splitString[0], splitString[1]));                
                }
                listBoxOperation.SelectedIndex = 0;                
                //读出结束符
                if ((str = ReadDataFromServer()) == null)
                    return;            
            }           
            else            
            {
                groupBoxOperation.Text = "信箱中没有邮件";               
                buttonRead.Enabled = false;                
                buttonDelete.Enabled = false;            
            }
            buttonConnect.Enabled = false;            
            buttonDisconnect.Enabled = true;            
            //设置鼠标光标为默认光标
            Cursor.Current = Cursors.Default;        
        }
        //向服务器发送信息
        private bool SendDataToServer(string str)        
        {
            try            
            {
                sw.WriteLine(str);                
                sw.Flush();
                listBoxStatus.Items.Add("发送:" + str);               
                return true;            
            }
            catch (Exception err)            
            {
                MessageBox.Show(err.Message, "发送 " + str + " 失败");               
                return false;           
            }        
        }
        //从网络流中读取服务器回送的信息        
        private string ReadDataFromServer()        
        {
            //从流中读取服务器返回的信息,写入信息列表框            
            string str = null;            
            try            
            {
                str = sr.ReadLine();
                listBoxStatus.Items.Add("收到:" + str);//5+1+a+s+p+x                
                //如果是-ERR,表明有错                
                if (str[0] == '-')                
                {
                    MessageBox.Show(str, "有错了");                    
                    str = null;                
                }
            }
            catch (Exception err)            
            {
                MessageBox.Show(err.Message, "无法读取");           
            }
            return str;        
        }
        //单击断开连接按钮触发的事件
        private void buttonDisconnect_Click(object sender, EventArgs e)        
        {
            //向服务器发送QUIT命令            
            SendDataToServer("QUIT");            
            sr.Close();            
            sw.Close();
            networkStream.Close();            
            tcpClient.Close();
            listBoxOperation.Items.Clear();           
            richTextBox1.Clear();
            listBoxStatus.Items.Clear();            
            buttonConnect.Enabled = true;            
            buttonDisconnect.Enabled = false;        
        }
        //单击阅读信件按钮触发的事件
        private void buttonRead_Click(object sender, EventArgs e)        
        {
            //设置鼠标光标为等待状态
            Cursor.Current = Cursors.WaitCursor;
            string mailMessage = listBoxOperation.SelectedItem.ToString();            
            mailMessage = mailMessage.Substring(1, mailMessage.IndexOf("封") - 1);           
            if (SendDataToServer("RETR " + mailMessage) == false)
                return;            
            string receiveData = sr.ReadToEnd();            
            //例子未进行解码处理
            //而仅仅将源代码原样显示出来,所以看到的涉及具体内容的信息将会是乱码           
            richTextBox1.Text = "源代码:\r\n";            
            richTextBox1.AppendText(receiveData);           
            //设置鼠标光标为默认光标
            Cursor.Current = Cursors.Default;        
        }
        //单击删除信件按钮触发的事件
        private void buttonDelete_Click(object sender, EventArgs e)        
        {
            string str = listBoxOperation.SelectedItem.ToString();            
            str = str.Substring(1, str.IndexOf("封") - 1);            
            if (SendDataToServer("DELE " + str) == true)
            {
                richTextBox1.Clear();
                int j = listBoxOperation.SelectedIndex;
                listBoxOperation.Items.Remove(listBoxOperation.Items[j].ToString());//5^1^a^s^p^x
                MessageBox.Show("删除成功", "恭喜");
            }
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值