另外一个ASP.NET 实现邮件发送和接受的功能(Sockets)

前台代码:html

<%@ Page language="c#" Codebehind="SocketMail.aspx.cs" AutoEventWireup="false" Inherits="UseFramework2.MailSys.Mail" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Mail</title>
        <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Mail" method="post" runat="server">
            <FONT face="宋体">
                <asp:TextBox id="tbServer" style="Z-INDEX: 101; LEFT: 143px; POSITION: absolute; TOP: 104px" runat="server"></asp:TextBox>
                <asp:TextBox id="tbSend" style="Z-INDEX: 120; LEFT: 413px; POSITION: absolute; TOP: 223px" runat="server"></asp:TextBox>
                <asp:Label id="Label10" style="Z-INDEX: 119; LEFT: 334px; POSITION: absolute; TOP: 231px" runat="server">发件人</asp:Label>
                <asp:Button id="btnSend" style="Z-INDEX: 118; LEFT: 441px; POSITION: absolute; TOP: 325px" runat="server" Width="76" Text="发送" Height="25"></asp:Button>
                <asp:Label id="Label9" style="Z-INDEX: 117; LEFT: 332px; POSITION: absolute; TOP: 179px" runat="server">收件人</asp:Label>
                <asp:Label id="Label8" style="Z-INDEX: 116; LEFT: 329px; POSITION: absolute; TOP: 278px" runat="server">邮件主题</asp:Label>
                <asp:Label id="Label7" style="Z-INDEX: 115; LEFT: 320px; POSITION: absolute; TOP: 102px" runat="server">SMTP服务器</asp:Label>
                <asp:TextBox id="tbSubject" style="Z-INDEX: 114; LEFT: 415px; POSITION: absolute; TOP: 270px" runat="server"></asp:TextBox>
                <asp:TextBox id="tbReceive" style="Z-INDEX: 113; LEFT: 416px; POSITION: absolute; TOP: 171px" runat="server"></asp:TextBox>
                <asp:TextBox id="tbSmtp" style="Z-INDEX: 112; LEFT: 419px; POSITION: absolute; TOP: 100px" runat="server"></asp:TextBox>
                <asp:Label id="Label5" style="Z-INDEX: 109; LEFT: 54px; POSITION: absolute; TOP: 245px" runat="server">密码</asp:Label>
                <asp:Label id="Label4" style="Z-INDEX: 108; LEFT: 54px; POSITION: absolute; TOP: 181px" runat="server">用户名称</asp:Label>
                <asp:label id="Label1" style="Z-INDEX: 106; LEFT: 414px; POSITION: absolute; TOP: 18px" runat="server" Width="175px" Font-Names="隶书" Font-Size="XX-Large">发邮件</asp:label>
                <asp:label id="Label2" style="Z-INDEX: 105; LEFT: 85px; POSITION: absolute; TOP: 14px" runat="server" Width="175px" Font-Names="隶书" Font-Size="XX-Large">收邮件</asp:label>
                <asp:TextBox id="tbUser" style="Z-INDEX: 102; LEFT: 143px; POSITION: absolute; TOP: 182px" runat="server"></asp:TextBox>
                <asp:TextBox id="tbPass" style="Z-INDEX: 103; LEFT: 143px; POSITION: absolute; TOP: 242px" runat="server" TextMode="Password"></asp:TextBox>
                <asp:TextBox id="tbBody" style="Z-INDEX: 104; LEFT: 141px; POSITION: absolute; TOP: 363px" runat="server" Width="458px" Height="87px"></asp:TextBox>
                <asp:Label id="Label3" style="Z-INDEX: 107; LEFT: 54px; POSITION: absolute; TOP: 103px" runat="server">POP3服务器</asp:Label>
                <asp:Button id="btnCheck" style="Z-INDEX: 110; LEFT: 67px; POSITION: absolute; TOP: 315px" runat="server" Width="76" Text="检查" Height="25"></asp:Button>
                <asp:Label id="Label6" style="Z-INDEX: 111; LEFT: 60px; POSITION: absolute; TOP: 387px" runat="server" Width="71px" Height="27px">邮件正文</asp:Label>
                <asp:DropDownList id="ddlNew" style="Z-INDEX: 121; LEFT: 200px; POSITION: absolute; TOP: 319px" runat="server" AutoPostBack="True"></asp:DropDownList></FONT></form>
    </body>
</HTML>
后台代码:cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Web.Mail;
using System.Text;

namespace UseFramework2.MailSys
{
    /** <summary>
    /// Mail 的摘要说明。
    /// </summary>
    public class Mail : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.TextBox tbServer;
        protected System.Web.UI.WebControls.TextBox tbUser;
        protected System.Web.UI.WebControls.TextBox tbPass;
        protected System.Web.UI.WebControls.Label Label2;
        protected System.Web.UI.WebControls.Label Label1;
        protected System.Web.UI.WebControls.Label Label3;
        protected System.Web.UI.WebControls.Label Label4;
        protected System.Web.UI.WebControls.Label Label5;
        protected System.Web.UI.WebControls.Button btnCheck;
        protected System.Web.UI.WebControls.Label Label6;
        protected System.Web.UI.WebControls.Label Label7;
        protected System.Web.UI.WebControls.TextBox tbSmtp;
        protected System.Web.UI.WebControls.TextBox tbReceive;
        protected System.Web.UI.WebControls.TextBox tbSubject;
        protected System.Web.UI.WebControls.Label Label8;
        protected System.Web.UI.WebControls.Label Label9;
        protected System.Web.UI.WebControls.Button btnSend;
        protected System.Web.UI.WebControls.Label Label10;
        protected System.Web.UI.WebControls.TextBox tbSend;
        protected System.Web.UI.WebControls.TextBox tbBody;
        protected System.Web.UI.WebControls.DropDownList ddlNew;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            // 在此处放置用户代码以初始化页面
        }

        Web Form Designer generated code#region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /** <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {   
            this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
            this.btnCheck.Click += new System.EventHandler(this.btnCheck_Click);
            this.ddlNew.SelectedIndexChanged += new System.EventHandler(this.ddlNew_SelectedIndexChanged);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void btnCheck_Click(object sender, System.EventArgs e)
        {
            POP3 pop = new POP3(tbServer.Text,tbUser.Text,tbPass.Text);
            int n = pop.GetNumberOfNewMessages();
            if(n==-1)
            {
                Response.Write("<script language='javascript'>alert('服务器连接错误!')</script>");
                return;
            }
            ddlNew.Items.Clear();
            for(int i=1;i<=n;i++)
                ddlNew.Items.Add("第"+i.ToString()+"封邮件");
            if(n>0)
            {
                MailMessage msg =  pop.GetNewMessages(0);
                if(msg!=null)
                    tbBody.Text = msg.Body;
            }

        }

        private void ddlNew_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            POP3 pop = new POP3(tbServer.Text,tbUser.Text,tbPass.Text);
            int n = ddlNew.SelectedIndex;
            if(n>=0)
            {
                MailMessage msg =  pop.GetNewMessages(n);
                if(msg!=null)
                    tbBody.Text = msg.Body;
            }
        }

        private void btnSend_Click(object sender, System.EventArgs e)
        {
            SMTP smtp = new SMTP();
            bool bSuccess = smtp.Send(tbSmtp.Text,25,tbSend.Text,tbReceive.Text,tbSubject.Text,tbBody.Text);
            if(bSuccess)
                Response.Write("<script language='javascript'>alert('邮件发送成功!')</script>");
            else
                Response.Write("<script language='javascript'>alert('邮件发送失败!')</script>");

        }
    }
    public class POP3
    {
        string POPServer;
        string user;
        string pwd;
        NetworkStream ns;
        StreamReader sr;

        public POP3(){}

        public POP3(string server, string _user, string _pwd)
        {
            POPServer = server;
            user = _user;
            pwd = _pwd;
        }

        private bool Connect()
        {
            TcpClient sender = new TcpClient(POPServer,110);
            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();
        }

        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;
            }
        }
        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.Web.Mail.MailMessage msg = new MailMessage();
                        msg.Subject = msgsubj;
                        msg.From = GetMessageFrom(msglines);
                        msg.Body = GetMessageBody(msglines);
                        newmsgs.Add(msg);
                        DeleteMessage(n);
                    }
                }

                Disconnect();
                return newmsgs;
            }
            catch(Exception e)
            {
                return newmsgs;
            }
        }
        public MailMessage GetNewMessages(int nIndex)
        {
            int newcount;
            System.Web.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 = GetMessageFrom(msglines);
                    msg.Body = GetMessageBody(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;
        }
        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";
        }
        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[] {'<'});
                    return tokens[1].Trim(new Char[] {'<','>'});
                }
            }
            return "None";
        }
        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;
        }
        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;
            }

        }

    }
    public class SMTP
    {
        public SMTP(){}

        public bool Send(string strSmtpServer,int nPort,string strSend,string strReceive
            ,string strSubject,string strContent)
        {
              
            string smtpserver=strSmtpServer;// smtp服务器的IP地址
            TcpClient tcpc = new TcpClient();
            try
            {
                tcpc.Connect(smtpserver, nPort);
                StreamReader sr ;
                string strCmd;
                sr = new StreamReader(tcpc.GetStream(),Encoding.Default);
                //服务器连接成功以后,首先向服务器发送HeLlo命令
                strCmd="HELO shaozhd";
                SenSmtpCmd(tcpc,strCmd);
                //然后向服务器发送信件的成员的信箱
                strCmd="mail from:"+ strSend;
                SenSmtpCmd(tcpc,strCmd);
                //向服务器发送收件人的信箱
                strCmd="rcpt to:" + strReceive;
                SenSmtpCmd(tcpc,strCmd);
                //所有的准备工作都已经作好了,下面开始进行邮件的部分
                strCmd="data";
                SenSmtpCmd(tcpc,strCmd);
                //邮件内容
                strCmd="Date: 1234567/r/n";
                strCmd=strCmd+"From: " + strSend +"/r/n";
                strCmd=strCmd+"To: " + strReceive +"/r/n";
                strCmd=strCmd+"Subject: " + strSubject +"/r/n/r/n";
                strCmd=strCmd + strContent +"/r/n/r/n";
                SenSmtpCmd(tcpc,strCmd);
                strCmd="/r/n./r/n";
                SenSmtpCmd(tcpc,strCmd);
                //最后 关闭与smtp 服务器的连接
          tcpc.Close();
                return true;
             }
            catch
            {
                return false;
            }
        }
        void SenSmtpCmd(TcpClient tcpc,String strCmd)
        {

         byte[] arrCmd;
          string strRet;
          StreamReader sr;
        Stream s;
        s=tcpc.GetStream();
        strCmd = strCmd + "/r/n";
        arrCmd= Encoding.Default.GetBytes(strCmd.ToCharArray());
        s=tcpc.GetStream();
        s.Write(arrCmd, 0, strCmd.Length);
            //以下用于程序调试,显示服务器回应信息
        sr = new StreamReader(tcpc.GetStream(), Encoding.Default);
        strRet=sr.ReadLine();
        return;
        }
    }
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Awinye/archive/2006/09/18/1238295.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值