基于POP3与SMTP协议的邮件收发程序的开发-1-一、设计思想电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。电子邮件不仅可利用电话网络,而且可利用任何通信网传送。在利用电话网络时,还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。电子邮件的工作过程遵循客户-服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。邮局服务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。一个邮件系统的传输包含用户代理UserAgent传输代理TransferAgent及接受代理DeliveryAgent三大部分。用户代理是一个用户发信和收信的程序,负责将电子邮件按照一定的标准包装,然后送至邮件服务器,或由邮件服务器收回。传输代理负责信件的交换和传输。将信件传送至适当的邮件主机,再由接受代理将信件分发至不同的邮件信箱。传输代理必须要能够接受用户邮件程序送来的信件,解读收信人的地址,根据SMTP协议将它正确无误地传递到目的地。现在一般的传输代理已采用Sendmail程序完成工作。电子邮件到达邮件主机后,在经接收代理POP协议被用户读取至自己的主机。电子邮件在发送与接收过程中都要遵循SMTP、POP3等协议,这些协议确保了电子邮件在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收Internet上的电子邮件。SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转你发出的电子邮件。POP3(PostOfficeProtocol3)即邮局协议,目前已发展到第三版,称POP3。它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。总的来说POP3协议是让用户把服务器上的信收到本地来所需要的一种协议。本程序为一个基于SMTP和POP3协议的小型EMAIL收发程序,简单的实现了邮件的收发功能。基于POP3与SMTP协议的邮件收发程序的开发-2-二、算法流程图图1算法流程图三、源代码下面给出的是用登录程序的源代码:usingSystem;//导入名字空间usingSystem.Collections.Generic;//包含定义各种对象集合的接口和类usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;//包含表示ASCII等字符编码的类usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.IO;USERE-mail用户操作SMTP协议POP3协议邮件服务器用户登录用户信息邮件信息选择邮件发送邮件接收邮件基于POP3与SMTP协议的邮件收发程序的开发-3-namespaceMailSendOfRecive//命名空间{publicpartialclassForm3:Form//定义类{publicstringConn,Uname,Pwd,Inf;//定义用户名、密码publicTcpClientServer;//定义服务器publicNetworkStreamNetStrm;publicStreamReaderRdStrm;publicBooleanBPass;//定义BPasspublicstringData;publicbyte[]szData;publicstringCRLF=\r\n;//定义快捷键publicForm2Sender;publicForm3()//定义框架{InitializeComponent();//初始化}privatevoidLogin_Click(objectsender,EventArgse){Conn=pop.+textBox1.Text.Trim();Uname=textBox2.Text.Trim();//用户名Pwd=textBox3.Text;//密码Server=newTcpClient(Conn,110);//服务器try{NetStrm=Server.GetStream();RdStrm=newStreamReader(Server.GetStream(),System.Text.Encoding.Default);RdStrm.ReadLine();Data=USER+Uname+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data);//获取ASCII值NetStrm.Write(szData,0,szData.Length);RdStrm.ReadLine();//读取字符并返回Data=PASS+Pwd+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data);NetStrm.Write(szData,0,szData.Length);Inf=RdStrm.ReadLine();if(Inf.IndexOf(+OK)-1){BPass=true;//布尔值设为真Sender=newForm2(Uname,Pwd,textBox1.Text);this.Hide();Sender.Show();}elseif(Inf.IndexOf(-OK)-1)//判断索引基于POP3与SMTP协议的邮件收发程序的开发-4-{MessageBox.Show(密码或者用户名错误,用户验证);//文本框显示信息}Data=QUIT;szData=System.Text.Encoding.ASCII.GetBytes(Data);NetStrm.Write(szData,0,szData.Length);//写入数据}catch(System.Exceptionex){MessageBox.Show(ex.Message);//文本框显示信息}}privatevoidForm3_Load(objectsender,EventArgse)//定义Form3_Load{}}}下面是发送邮件程序源代码usingSystem;//导入名字空间usingSystem.Collections.Generic;//包含定义各种对象集合的接口和类usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;//包含表示ASCII等字符编码的类usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.IO;usingSystem.Collections;usingSystem.Data.OleDb;namespaceMailSendOfRecive//命名空间{publicpartialclassForm1:Form//定义类{TcpClientsmtpSrv;NetworkStreamnetStm;//提供数据流stringCRLF=\r\n;publicListMailInfoSMail=newListMailInfo();publicForm2fa;publicstringUa,Pw,Sv;基于POP3与SMTP协议的邮件收发程序的开发-5-publicForm1(Form2f,stringUN,stringPd,stringSR)//创建Form1{fa=f;Ua=UN;Pw=Pd;Sv=SR;InitializeComponent();//初始化}publicvoidWriteStream(stringstrCmd){strCmd+=CRLF;//crlf表示结束byte[]bw=System.Text.Encoding.Default.GetBytes(strCmd);//将字符串转为字节数组netStm.Write(bw,0,bw.Length);//写入网络}privatestringAuthStream(stringstrCmd)//连接服务器输出字符串{try{byte[]by=System.Text.Encoding.Default.GetBytes(strCmd);strCmd=Convert.ToBase64String(by);//转换成base64编码}catch(System.Exceptionex){returnex.ToString();}returnstrCmd;}publicbooltryTran(refstringa)//定义布尔变量{stringb=;b=a;try{byte[]outputb=Convert.FromBase64String(a);//转换数据类型a=Encoding.Default.GetString(outputb);returntrue;}catch(System.Exceptionex)//显示错误{a=b;returnfalse;}}publicvoidWritInf(strings)//定义WritInf基于POP3与SMTP协议的邮件收发程序的开发-6-{tryTran(refs);listBoxMsg.Items.Add(s);}privatevoidButtonSend_Click(objectsender,EventArgse)//定义ButtonSend_Click{listBoxMsg.Items.Clear();//存放smtp服务器返回的信息try{stringdata;progressBar1.Visible=true;progressBar1.Value=1;smtpSrv=newTcpClient(smtp.+Sv,25);//TextBoxSer.Text,25);//连接smtp服务器netStm=smtpSrv.GetStream();//取得Networkstream对象,来发送接收数据StreamReaderrdStrm=newStreamReader(smtpSrv.GetStream());//产生StreamReader来读取数据流WriteStream(EHLOLocal);//发送命令建立连接progressBar1.Value++;listBoxMsg.Items.Add(输入用户名开始);WriteStream(AUTHLOGIN);//发送命令请求验证listBoxMsg.Items.Add(rdStrm.ReadLine());progressBar1.Value++;data=AuthStream(Ua);//data);//