⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pop3.cs

📁 收发邮件功能
💻 CS
字号:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Collections;
using System.Net.Mail;


/// <summary>
///POP3 的摘要说明
/// </summary>
public class POP3
{
    string POPServer;
    string user;
    string pwd;
    int port;
    NetworkStream ns;
    StreamReader sr;
    public string Date;
    public POP3(string server, string _user, string _pwd, int _port)
    {
        POPServer = server;
        user = _user;
        pwd = _pwd;
        port = _port;
    }
    /// 连接服务器
    private bool Connect()
    {
        TcpClient sender = new TcpClient(POPServer, port);
        byte[] outbytes;
        string input;
        try
        {
            ns = sender.GetStream();

            sr = new StreamReader(ns);

            sr.ReadLine();
            input = "user " + user + "\r\n";
            outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
            ns.Write(outbytes, 0, outbytes.Length);
            sr.ReadLine();

            input = "pass " + pwd + "\r\n";
            outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
            ns.Write(outbytes, 0, outbytes.Length);
            sr.ReadLine();
            return true;
        }
        catch
        {
            return false;
        }
    }
    /// 断开与服务器的连接
    private void Disconnect()
    {
        string input = "quit" + "\r\n";
        Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
        ns.Write(outbytes, 0, outbytes.Length);
        ns.Close();
    }
    /// <summary>
    /// 获取邮箱中新邮件数量
    /// </summary>
    /// <returns></returns>
    public int GetNumberOfNewMessages()
    {
        byte[] outbytes;
        string input;

        try
        {
            Connect();

            input = "stat" + "\r\n";
            outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
            ns.Write(outbytes, 0, outbytes.Length);
            string resp = sr.ReadLine();
            string[] tokens = resp.Split(new Char[] { ' ' });

            Disconnect();

            return Convert.ToInt32(tokens[1]);
        }
        catch
        {
            return -1;
        }
    }

    /// <summary>
    /// 获取邮件信息
    /// </summary>
    /// <param name="subj"></param>
    /// <returns></returns>
    public ArrayList GetNewMessages(string subj)
    {

        int newcount;
        ArrayList newmsgs = new ArrayList();

        try
        {
            newcount = GetNumberOfNewMessages();
            Connect();

            for (int n = 1; n < newcount + 1; n++)
            {
                ArrayList msglines = GetRawMessage(n);
                string msgsubj = GetMessageSubject(msglines);
                if (msgsubj.CompareTo(subj) == 0)
                {
                    System.Net.Mail.MailMessage msg = new MailMessage();
                    msg.Subject = msgsubj;
                    msg.From = new MailAddress(GetMessageFrom(msglines));
                    msg.Body = GetMessageBody(msglines);
                    newmsgs.Add(msg);
                    DeleteMessage(n);
                }
            }

            Disconnect();
            return newmsgs;
        }
        catch (Exception e)
        {
            return newmsgs;
        }
    }

    /**/
    /// <summary>
    /// 获取新邮件
    /// </summary>
    /// <param name="nIndex"></param>
    /// <returns></returns>
    public MailMessage GetNewMessages(int nIndex)
    {
        int newcount;
        System.Net.Mail.MailMessage msg = new MailMessage();

        try
        {
            newcount = GetNumberOfNewMessages();
            Connect();
            int n = nIndex + 1;

            if (n < newcount + 1)
            {
                ArrayList msglines = GetRawMessage(n);
                string msgsubj = GetMessageSubject(msglines);


                msg.Subject = msgsubj;
                msg.From = new MailAddress(GetMessageFrom(msglines));
                msg.Body = GetMessageBody(msglines);
                Date = GetMessageDate(msglines);
            }

            Disconnect();
            return msg;
        }
        catch
        {
            return null;
        }
    }
    private ArrayList GetRawMessage(int messagenumber)
    {
        Byte[] outbytes;
        string input;
        string line = "";

        input = "retr " + messagenumber.ToString() + "\r\n";
        outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
        ns.Write(outbytes, 0, outbytes.Length);

        ArrayList msglines = new ArrayList();
        do
        {
            line = sr.ReadLine();
            msglines.Add(line);
        } while (line != ".");
        msglines.RemoveAt(msglines.Count - 1);

        return msglines;
    }

    /**/
    /// <summary>
    /// 获取邮件主题
    /// </summary>
    /// <param name="msglines"></param>
    /// <returns></returns>
    private string GetMessageSubject(ArrayList msglines)
    {
        string[] tokens;
        IEnumerator msgenum = msglines.GetEnumerator();
        while (msgenum.MoveNext())
        {
            string line = (string)msgenum.Current;
            if (line.StartsWith("Subject:"))
            {
                tokens = line.Split(new Char[] { ' ' });
                return tokens[1].Trim();
            }
        }
        return "None";
    }

    /**/
    /// <summary>
    /// 获取邮件源地址
    /// </summary>
    /// <param name="msglines"></param>
    /// <returns></returns>
    private string GetMessageFrom(ArrayList msglines)
    {
        string[] tokens;
        IEnumerator msgenum = msglines.GetEnumerator();
        while (msgenum.MoveNext())
        {
            string line = (string)msgenum.Current;
            if (line.StartsWith("From:"))
            {
                tokens = line.Split(new Char[] { '<' });
                if (tokens.Length > 1)
                {
                    return tokens[1].Trim(new char[] { '>' });
                }
                else
                {
                    return tokens[0].Trim().Substring(5);
                }
            }
        }
        return "None";
    }

    /**/
    /// <summary>
    /// 获取邮件内容
    /// </summary>
    /// <param name="msglines"></param>
    /// <returns></returns>
    private string GetMessageBody(ArrayList msglines)
    {
        string body = "";
        string line = " ";
        IEnumerator msgenum = msglines.GetEnumerator();

        while (line.CompareTo("") != 0)
        {
            msgenum.MoveNext();
            line = (string)msgenum.Current;
        }

        while (msgenum.MoveNext())
        {
            body = body + (string)msgenum.Current + "\r\n";
        }
        return body;
    }

    /**/
    /// <summary>
    /// 获取邮件Date
    /// </summary>
    /// <param name="msglines"></param>
    /// <returns></returns>
    private string GetMessageDate(ArrayList msglines)
    {
        string[] tokens;
        IEnumerator msgenum = msglines.GetEnumerator();
        while (msgenum.MoveNext())
        {
            string line = (string)msgenum.Current;
            if (line.StartsWith("Date:"))
            {
                tokens = line.Split(new Char[] { ' ' });
                return tokens[1].Trim()+" "+tokens[2].Trim()+" "+tokens[3].Trim();
            }
        }
        return "None";
    }
    /**/
    /// <summary>
    /// 删除邮件
    /// </summary>
    /// <param name="messagenumber"></param>
    private void DeleteMessage(int messagenumber)
    {
        Byte[] outbytes;
        string input;

        try
        {
            input = "dele " + messagenumber.ToString() + "\r\n";
            outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
            ns.Write(outbytes, 0, outbytes.Length);
        }
        catch (Exception e)
        {
            return;
        }


	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -