基本信息
源码名称:C#收发电子邮件
源码大小:0.44M
文件格式:.rar
开发语言:C#
更新时间:2017-10-16
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍
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.Collections;
using System.Threading;
using OpenPOP.POP3;
using OpenPOP;



namespace MailClient
{
    public partial class Form1 : Form
    {
        private POPClient popClient = new POPClient();
        private Hashtable msgs = new Hashtable();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            txtMessage.Text = "";
            msgs.Clear();
            listMessages.Nodes.Clear();//邮件列表
            listAttachments.Nodes.Clear();//附件列表
            popClient.AuthenticationBegan = new EventHandler(popClient_AuthenticationBegan);
            popClient.AuthenticationFinished = new EventHandler(popClient_AuthenticationFinished);
            popClient.CommunicationBegan = new EventHandler(popClient_CommunicationBegan);
            popClient.CommunicationOccured = new EventHandler(popClient_CommunicationOccured);
            popClient.CommunicationLost = new EventHandler(popClient_CommunicationLost);
            popClient.MessageTransferBegan = new EventHandler(popClient_MessageTransferBegan);
            popClient.MessageTransferFinished = new EventHandler(popClient_MessageTransferFinished);

        }
        #region 通讯事件
        private void popClient_CommunicationBegan(object sender, EventArgs e)
        {
            AddEvent("开始连接POP3服务器");
        }

        private void popClient_CommunicationOccured(object sender, EventArgs e)
        {
            AddEvent("连接成功!");
        }

        private void popClient_AuthenticationBegan(object sender, EventArgs e)
        {
            AddEvent("经行用户验证");
        }

        private void popClient_AuthenticationFinished(object sender, EventArgs e)
        {
            AddEvent("验证成功!");
        }

        private void popClient_MessageTransferBegan(object sender, EventArgs e)
        {
            AddEvent("开始经行邮件接收");
        }

        private void popClient_MessageTransferFinished(object sender, EventArgs e)
        {
            AddEvent("邮件接收完毕!");
        }

        private void popClient_CommunicationLost(object sender, EventArgs e)
        {
            AddEvent("关闭连接!");
        }
        #endregion

        /// <summary>
        /// 接收邮件,直接收邮件头
        /// 陈明新
        /// </summary>
        private void ReceiveMails()
        {
            popClient.Disconnect();
            popClient.Connect(txtPOPServer.Text, int.Parse(txtPort.Text));
            popClient.Authenticate(txtLogin.Text, txtPassword.Text);

            int Count = popClient.GetMessageCount();//读取邮件总数

            txtTotalMessages.Text = Count.ToString();

            txtMessage.Text = "";
            msgs.Clear();
            listMessages.Nodes.Clear();//邮件列表
            listAttachments.Nodes.Clear();//附件列表

            for (int i = Count; i >= 1; i -= 1)
            {
                OpenPOP.MIMEParser.Message m = popClient.GetMessageHeader(i);//获得邮件头
                TreeNode node;
                if (m != null)
                {
                    if (m.Subject.Length > 0)
                        node = listMessages.Nodes.Add(m.Subject);
                    else
                        node = listMessages.Nodes.Add("无主题");
                    node.Tag = i.ToString();
                }
                Thread.Sleep(1);
            }
            MessageBox.Show(this, "邮件接收完毕!");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ReceiveMails();
        }

        private void listMessages_AfterSelect(object sender, TreeViewEventArgs e)
        {
            OpenPOP.MIMEParser.Message m = popClient.GetMessage(Int32.Parse(listMessages.SelectedNode.Tag.ToString()), false);//读出邮件全部内容
            if (msgs["msg" listMessages.SelectedNode.Tag.ToString()] == null)
                msgs.Add("msg" listMessages.SelectedNode.Tag.ToString(), m);//存入哈希表
            if (m != null)
            {
                if (m.MessageBody.Count > 0)
                {
                    txtMessage.Text = (string)m.MessageBody[m.MessageBody.Count - 1];
                    webBrowser1.DocumentText = (string)m.MessageBody[m.MessageBody.Count - 1];
                }
                listAttachments.Nodes.Clear();
                string filenm="";
                for (int i = 0; i < m.AttachmentCount; i )
                {
                    OpenPOP.MIMEParser.Attachment att = m.GetAttachment(i);//获取邮件附件列表
                    filenm = m.GetAttachmentFileName(att);
                    if (filenm != "body.html" && filenm != "body.htm")//附件列表中去除邮件正文
                        listAttachments.Nodes.Add(filenm).Tag = att;

                }
                #region 邮件详细信息
                DataSet ds = new DataSet();
                ds.Tables.Add("table1");
                ds.Tables[0].Columns.Add("Header");
                ds.Tables[0].Columns.Add("Value");

                ds.Tables[0].Rows.Add(new object[] { "AttachmentBoundry", m.AttachmentBoundry });
                ds.Tables[0].Rows.Add(new object[] { "AttachmentBoundry2", m.AttachmentBoundry2 });
                ds.Tables[0].Rows.Add(new object[] { "AttachmentCount", m.AttachmentCount });

                for (int j = 0; j < m.CC.Length; j )
                    ds.Tables[0].Rows.Add(new object[] { "CC", m.CC[j] });
                for (int j = 0; j < m.TO.Length; j )
                    ds.Tables[0].Rows.Add(new object[] { "TO", m.TO[j] });

                ds.Tables[0].Rows.Add(new object[] { "ContentEncoding", m.ContentEncoding });
                ds.Tables[0].Rows.Add(new object[] { "ContentLength", m.ContentLength });
                ds.Tables[0].Rows.Add(new object[] { "ContentType", m.ContentType });
                ds.Tables[0].Rows.Add(new object[] { "FROM", m.From });
                ds.Tables[0].Rows.Add(new object[] { "FromEmail", m.FromEmail });
                ds.Tables[0].Rows.Add(new object[] { "HasAttachment", m.HasAttachment });
                ds.Tables[0].Rows.Add(new object[] { "MessageID", m.MessageID });
                ds.Tables[0].Rows.Add(new object[] { "MimeVersion", m.MimeVersion });
                ds.Tables[0].Rows.Add(new object[] { "ReturnPath", m.ReturnPath });
                ds.Tables[0].Rows.Add(new object[] { "Subject", m.Subject });
                ds.Tables[0].Rows.Add(new object[] { "Date", m.Date });
                ds.Tables[0].Rows.Add(new object[] { "Received", m.Received });
                ds.Tables[0].Rows.Add(new object[] { "HTML", m.HTML });
                ds.Tables[0].Rows.Add(new object[] { "Importance", m.Importance });
                ds.Tables[0].Rows.Add(new object[] { "ReplyTo", m.ReplyTo });
                ds.Tables[0].Rows.Add(new object[] { "ReplyToEmail", m.ReplyToEmail });
                for (int j = 0; j < m.Keywords.Count; j )
                    ds.Tables[0].Rows.Add(new object[] { "Keyword", (string)m.Keywords[j] });
                for (IDictionaryEnumerator i = m.CustomHeaders.GetEnumerator(); i.MoveNext(); )
                    ds.Tables[0].Rows.Add(new object[] { (string)i.Entry.Key, (string)i.Entry.Value });
                gridHeaders.DataMember = ds.Tables[0].TableName;
                gridHeaders.DataSource = ds;
                #endregion
                
            }
        }

        private void listAttachments_AfterSelect(object sender, TreeViewEventArgs e)
        {
            OpenPOP.MIMEParser.Attachment att = (OpenPOP.MIMEParser.Attachment)listAttachments.SelectedNode.Tag;
            OpenPOP.MIMEParser.Message m = (OpenPOP.MIMEParser.Message)msgs["msg" listMessages.SelectedNode.Tag.ToString()];

            if (att != null & m != null)
            {
                saveFile.FileName = m.GetAttachmentFileName(att);
                DialogResult result = saveFile.ShowDialog();
                if (result != DialogResult.OK)
                    return;

                //if (m.IsMIMEMailFile(att))//这里MIME 邮件 也通过附件形式直接下载
                //{
                //    result = MessageBox.Show(this, "邮件附件是 MIME 类型,要执行吗?", "MIME mail", MessageBoxButtons.YesNo);
                //    if (result == DialogResult.Yes)
                //    {
                //        OpenPOP.MIMEParser.Message m2 = att.DecodeAsMessage();
                //        string attachmentNames = "";
                //        bool blnRet = false;
                //        if (m2.AttachmentCount > 0)
                //            for (int i = 0; i < m2.AttachmentCount; i )
                //            {
                //                OpenPOP.MIMEParser.Attachment att2 = m2.GetAttachment(i);
                //                attachmentNames = m2.GetAttachmentFileName(att2) "(" att2.ContentLength " bytes)\r\n";
                //            }
                //        blnRet = m.SaveAttachments(System.IO.Path.GetDirectoryName(saveFile.FileName));
                //        MessageBox.Show(this, "附件 " (blnRet == true ? "保存成功" : "保存失败") "!\r\n\r\n附件:\r\n" attachmentNames);
                //    }
                //    else
                //    {
                //        MessageBox.Show(this, "附件 " ((m.SaveAttachment(att, saveFile.FileName)) ? "保存成功" : "保存失败") "!");
                //    }
                //}
                //else
                    MessageBox.Show(this, "附件 " ((m.SaveAttachment(att, saveFile.FileName)) ? "保存成功" : "保存失败") "!");
            }
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            DialogResult drRet = MessageBox.Show(this, "确定要删除该邮件?", "删除邮件", MessageBoxButtons.YesNo);
            if (drRet == DialogResult.Yes)
            {
                popClient.DeleteMessage(Convert.ToInt32(listMessages.SelectedNode.Tag));

                listMessages.SelectedNode.Remove();

                drRet = MessageBox.Show(this, "要重新读取邮件列表吗?", "收邮件", MessageBoxButtons.YesNo);
                if (drRet == DialogResult.Yes)
                    ReceiveMails();
            }
        }
        private void AddEvent(string strEvent)
        {
            lstEvents.Items.Add(strEvent);
            lstEvents.SelectedIndex = lstEvents.Items.Count - 1;
        }

    }
}