基于POP3与SMTP协议的邮件收发程序的开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计思想
电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。电子邮件不仅可利用电话网络, 而且可利用任何通信网传送。在利用电话网络时, 还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。
电子邮件的工作过程遵循客户- 服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。邮局服
务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。
一个邮件系统的传输包含用户代理User Agent 传输代理TransferAgent 及接受代理DeliveryAgent 三大部分。
用户代理是一个用户发信和收信的程序, 负责将电子邮件按照一定的标准包装,然后送至邮件服务器, 或由邮件服务器收回。传输代理负责信件的交换和传输。将信件传送至适当的邮件主机, 再由接受代理将信件分发至不同的邮件信箱。传输代理必须要能够接受用户邮件程序送来的信件,解读收信人的地址,根据SMTP协议将它正确无误地传递到目的地。现在一般的传输代理已采用Sendmail 程序完成工作。电子邮件到达邮件主机后, 在经接收代理POP协议被用户读取至自己的主机。
电子邮件在发送与接收过程中都要遵循SMTP POP3等协议,这些协议确保了电子邮件
在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收In ternet 上的电子邮件。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/ IP协议族,
它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,
我们就可以把E—mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP!务器则是遵循SMTP
协议的发送邮件服务器,用来发送或中转你发出的电子邮件。
POP3(Post Office Protocol 3)即邮局协议,目前已发展到第三版,称POP3它规
定怎样将个人计算机连接到Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议
的接收邮件服务器,用来接收电子邮件的。总的来说POP3协议是让用户把服务器上的信收
到本地来所需要的一种协议。
本程序为一个基于SMTP和POP3协议的小型EMAIL收发程序,简单的实现了邮件的收发功能。
三、源代码
下面给出的是用登录程序的源代码:
using System;
using System.Collections.Generic; using ponentModel; using System.Data; using System.Drawing; using Syste m. Linq; using System.Text;
using System.Windows.Forms; using ; using .Sockets; using Syste m 」O;
算法流程图
图1算法流程图
//导入名字空间
//包含定义各种对象集合的接口和类
〃包含表示 ASCII 等字符编码的类
namespace MailSendOfRecive
{
public partial class Form3 : Form
{
public string Conn,Uname,Pwd,Inf; public TcpClient Server;
public NetworkStream NetStrm; public StreamReader RdStrm; public Boolean BPass;
public string Data;
public byte[] szData;
public string CRLF = "\r\n";
public Form2 Sender;
public Form3()
{
InitializeComponent();
}
private void Login_Click(object sender, EventArgs e)
Conn = "pop."+textBox1.Text.Trim();
Uname = textBox2.Text.Trim();
Pwd = textBox3.Text;
Server = new TcpClient(Conn, 110); try
{
NetStrm = Server.GetStream();
RdStrm = new StreamReader(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 = new Form2(Uname, Pwd, textBox1.Text); this.Hide();
Sender.Show();
}
else if (Inf.IndexOf("-OK")>-1)
/ / 判断索引//命名空间
//定义类
//定义用户名、密码//定义服务器
// 定义BPass
//定义快捷键
//定义框架
//初始化
//用户名
//密码
//服务器
//读取字符并返回