1、基于 C/S 的电子邮件简单收发系统设计与实现摘 要电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大用户接受。早期的电子邮件只是从一个计算机终端向另外一个计算机终端传送文本信息,而现在的电子邮件不仅可以发送文本信息,还可以传送声音、图片、文档等多种信息。很多邮件邮件客户端软件不断地被用户利用起来,例如outlook,Foxmail,但是这些邮件客户端对于很多用户来说却过于复杂。为了方便用户快捷地收发邮件,本课题利用 SMTP 协议和 POP3 协议,经过前期对系统的需求分析和对相关协议的了解,设计并实现了简单的电子邮件收发系统。为了保证本系统功能的完整性,在实现该系统过程中,设计
2、了邮件用户注册模块,当用户首次使用本系统时,须注册一个邮件账号,然后才能进行其他的操作。作为一个电子邮件客户端,邮件的发送与收取是其核心功能,本系统邮件发送块实现电子邮件的发送,支持邮件的单个发送和群发,在邮件收取块,实现了电子邮件的简单收取。另外还增加了地址薄管理块让用户更方便地管理自己的联系人,对联系人进行添加、修改、删除等。关键词:电子邮件;SMTP;POP3;邮件收发系统Design and Implementation of Simple Email Receiving and Sending System Based on C/S AbstractEmail is the comm
3、unication tool which is widely used in the internet to exchange information. Now it has been accepted by many people. In the early days, email is only used in transmitting pure text information from a computer terminal to another. But at present, it is not limited in this, it can support many types
4、of information, such as voice, picture, document and so on. Much software has been used by users. such as Outlook, Foxmail and so on. But they are too complex to many users. In order to send and receive email conveniently, a simple email sending and receiving system has been designed based on SMTP a
5、nd POP3 protocol after requirement analysis and protocols learning. To prove integrality of the system, the block of accounts registering is necessary. When using this system first time, users should register one account. It has the kernel function of sending and receiving email. In the block of sen
6、ding email, group sending is supported. In addition, there is an address management block.Key words: E-mail; SMTP; POP3; Mail Receiving and Sending System目 录论文总页数:27页1 引言 .11.1 邮件客户端相关介绍 .11.2 课题背景 .11.3 现状分析 .12 电子邮件相关协议 .22.1 RFC822 邮件格式 .22.2 SMTP 协议 .22.2.1 SMTP 协议简介 .22.2.2 SMTP 的命令与应答 .32.3 PO
7、P3 协议 .52.3.1 POP3 协议简介 .52.3.2 POP3 的命令和应答 .63 系统需求分析 .73.1 功能需求 .73.1.1 邮件发送需求 .83.1.2 邮件接收需求 .83.1.3 附加功能需求 .83.2 研究思路 .83.2.1 用户注册块 .83.2.2 邮件发送块 .83.2.3 邮件接收块 .83.2.4 地址薄管理块 .84 系统总体功能模块和系统总体流程 .84.1 系统总体功能模块 .84.2 系统流程 .95 系统功能实现 .95.1 新建账号模块 .95.1.1 模块功能 .95.1.2 核心实现 .95.1.3 运行界面 .105.2 发送邮件模
8、块 .115.2.1 模块功能 .115.2.2 核心实现 .115.2.2 运行界面 .155.3 接收邮件模块 .165.3.1 模块功能 .165.3.2 核心实现 .165.3.3 运行界面 .165.4 地址薄模块 .175.4.1 模块功能 .175.4.2 核心实现 .175.4.3 运行界面 .216 系统功能测试 .216.1 发送邮件测试 .216.2 接收邮件测试 .226.3 地址薄管理测试 .236.4 测试结果 .24结 论 .24参考文献 .25致 谢 .26声 明 .27第 1 页 共 27 页1 引言1.1 邮件客户端相关介绍电子邮件(Electronic M
9、ail、E-mai1)又称电子信箱,它是种用电子手段提供信息交换的通信方式,是应用于网络上的使用最广泛的网络功能之一。到目前为止,可以说电子邮件是 Internet 资源使用最多的一种服务,E-mail 不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。电子邮件不是“终端到终端”的服务,而是被称为“存贮转发式”的服务。“存贮转发式”正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。电子邮件的发送几乎是即时的并且可以一次发送给多个人,发送和接收主要通过 SMTP 协议和 POP3 协议来实现,经过几十年的发展,电子邮件系统已经形成了完善的技术体系。电子
10、邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。电子邮件系统采用“存储转发”的机制来完成电子邮件的收发。邮件服务器处理发送和接收消息的事项,并在处理电子邮件的过程中与其他机器进行通信。图 1 工作流程图1.2 课题背景随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大网民接受。在了解 RFC 底层协议的基础上,本课题开发了这个功能相对简单实用的邮件客户端程序。1.3 现状分析电子邮件来源于专有电子邮件系统,早在 Internet 流行以前,电子邮件就已经存在了,是在主机-
11、多终端的主从式体系中从一台计算机终端向另一台计算机终端传送文本信息的相对简单的方法下发展起来的。经历了漫长的过程之后,它现在已经演变成为一个更加复杂并丰富得多的系统,可以传送声音、图片、图像、文档等多媒体信息,以至于如数据库或账户报告等更加专业化的文件都可以以电子邮件附件的形式在网上分发。现在,电子邮件已成为许多商家和组织机构的生命血脉,用户可以通过电子邮件的讨论会进行项目管理,并且有时第 2 页 共 27 页还根据快速而且跨洲际的电子邮件信息交换进行重要的决策行动。毫无疑问的是,Internet 扩展了其应用的范围,过去只能在其局域网上进行交谈的公司现在可以通过网络与他们的客户、竞争伙伴与世
12、界上的任何人进行通信和交流。一旦某个组织的电子邮件系统运行在支持 TCP/IP 协议的网络上或具有支持两个Internet 邮件服务协议 SMTP(简单邮件传输协议)和 POP(邮局协议)之一的Internet 网关,它的邮件用户就能够连接到任何具有相似连接的电子邮件地址上了,并且不论其电子邮件账户在何处。2 电子邮件相关协议开发邮件客户端程序,就不得不用到 RFC822 邮件格式、SMTP 协议和 POP3协议。RFC822 定义了用于电子邮件报文的格式,即 RFC822 定义了 POP3、SMTP以及其他电子邮件传输协议所提交、传输的内容;POP3 是因特网上传输邮件的第一个协议,也是一个
13、离线协议;SMTP 是 Internet 上传输电子邮件的标准协议,用于提交和传送电子邮件,规定了主机之间传输电子邮件的标准交换格式和邮件在链路层上的传输机制。2.1 RFC822 邮件格式RFC822 中对电子邮件的格式加以定义,内容全部由 ASCII 字符组成,就是通常所说的文本文件,因而标准将它称为 Internet 文本信件(Internet Text Messages)。为了支持多媒体文档的传输,1996 年又发表了一系列的关于MIME(Multipurpose Internet mail Extensions)格式的定义。RFC822 定义的邮件格式由两部分组成:邮件头(也称信封)
14、和邮件内容。邮件头包括与传输、投递邮件有关的信息;邮件内容包括标题和正文。2.2 SMTP 协议SMTP( Simple Mail Transfer Protocol)简单邮件传输协议,是目前使用最广泛的发送电子邮件的协议。SMTP 通常用于把电子邮件从客户机传输到服务器,以及从某一服务器传输到另一个服务器。2.2.1 SMTP 协议简介简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。SMTP 的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),该环境可以包括一个网络,几个网络或一个网络的
15、子网。传送系统(或 IPCE)不是一对一的,进程可能直接和其它进程通过已知的 IPCE 通信。邮件是一个应用程序或进程间通信,邮件可以通过连接在不同 IPCE 上的进程跨网络进行邮件传送,更特别的是,邮件可以通过不同网络上的主机进行接力式传送。SMTP 设计基于以下通信模型:针对用户的邮件请求,发送 SMTP 与接收第 3 页 共 27 页SMTP 之间建立一个双向传送通道。接收 SMTP 可以是最终接收者也可以是中间传送者。SMTP 命令由发送 SMTP 发出,由接收 SMTP 接收,而应答则反方向传送。一旦传送通道建立,SMTP 发送者发送 MAIL 命令指明邮件发送者。如果SMTP 接收
16、者可以接收邮件则返回 OK 应答。SMTP 发送者再发出 RCPT 命令确认邮件是否接收到。如果 SMTP 接收者接收,则返回 OK 应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK 应答。SMTP 提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;当两者不在同一个传送服务下时,通过中继 SMTP 服务器传送,为了能够对 SMTP 服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。SMTP 的工作过程有一下几个过程有
17、:(Mail)基本发送过程,向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换等。2.2.2 SMTP 的命令与应答SMTP 定义了 14 个命令,它们是:HELO MAIL FROM: RCPT TO: DATA RSET SEND FROM: SOML FROM: SAML FROM: VRFY EXPN HELP NOOP QUIT TURN 其中使得 SMTP 工作的基本的命令有 7 个,分别为:HELO,MAIL,RCPT,DATA,REST,NOOP 和 QUIT。下面分别介绍如下:第 4 页 共 27 页HELO-发件方向收件方问候,命令后面是发件人的服务器地址或
18、标识。收件方回答 OK 时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。MAIL-这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的,这个命令会清空有关的缓冲区,为新的邮件做好准备。RCPT -这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报 550 错误代码通知发件方;如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务
19、器)换成下一个服务器。DATA-收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是“.“的行结束数据。结束行对于接收方意味着立即开始缓冲区内的数据传送,传送结束后清空缓冲区;如果传送接受,接收方回复 OK。REST-这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据、发件人数据和待传送的数据都必须清除,接收方必须回答 OK。NOOP-这个命令不影响任何参数,只是要求接收方回答 OK,不会影响缓冲区的数据。QUIT-SMTP 要求接收方必须回答 OK,然后中断传输。在收到这个命令并回答 OK 前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到 O
20、K 答复前,也不得中断连接。对 SMTP 命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也保证了发送 SMTP 知道接收 SMTP 的状态。每个命令必须有且只有一个响应。SMTP 响应由三位数字组成,其后跟一些文本。数字决定了下一个应该进入的状态,而文本对人是有意义的。三位的响应已经包括了足够的信息,不用再阅读文本,文本可以直接抛弃或者传递给用户。特别的是,文本是与接收和环境相关的,所以每次接收到的文本可能不同。在附录 E 中可以看到全部的响应码。正规的情况下,响应由下面序列构成:三位的数字,一行文本和一个,或者也可以是一个多行响应。只有 EXPN 和 HELP 命令可以导致多
21、行应答,然而对所有命令,多行响应都是允许的。SMTP 协议传送邮件的应答:500 格式错误,命令不可识别(此错误也包括命令行过长)第 5 页 共 27 页501 参数格式错误502 命令不可实现503 错误的命令序列504 命令参数不可实现211 系统状态或系统帮助响应214 帮助信息220 服务就绪221 服务关闭传输信道 421 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)250 要求的邮件操作完成251 用户非本地,将转发向450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)451 放
22、弃要求的操作;处理过程中出错551 用户非本地,请尝试452 系统存储不足,要求的操作未执行552 过量的存储分配,要求的操作未执行553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)354 开始邮件输入,以.结束554 操作失败2.3 POP3 协议POP3(Post office Protrol,邮局协议,第 3 版)是 Internet 上传输电子邮件的第一个标准协议,也是一个离线协议。POP3 为客户机提供了发送信任状(用户名和密码),这样就可以规范对电子邮件的访问。POP3 是绝大多数邮件收发程序使用的协议,用户接收邮件时,一般都使用该协议。2.3.1 POP3 协议简介POP
23、3 协议适用于 C/S 结构的脱机模型的电子邮件协议。在 POP3 协议下,当客户机与服务器连接并查询电子邮件时,被客户机所指定的将被下载的邮件都将被程序下载到客户机,下载后客户机可进行读取,修改等操作,而无需与服务器进一步交互。POP3 客户向 POP3 服务器发送命令并等待响应,POP3 命令采用命令行形式,用 ASCII 码表示。第 6 页 共 27 页服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以 ASCII 文本+OK 或-ERR 指出相应的操作状态。在 POP3 协议中有三种状态,即认可状态,处理状态和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身
24、份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出 quit 命令,则进入更新状态,更新之后重返认可状态。图 2 POP3 协议与三种状态间的关系2.3.2 POP3 的命令和应答一般情况下,大多数现有的 POP3 客户端与服务器执行采用 ASCII 明文发送用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令user/pass 对在网络上发送明文用户名和口令给服务器 进行身份确认。一旦确认成功,便转入处理状态。为了避免发送明文口令的问题,有一种新的认证方法,命令为 APOP,使用 APOP,口令在传输之前被加密。当第一次与服务器连接时,POP3 服务器向客户
25、机发送一个 ASCII 码问候,这个问候由一串字符组成对每个客户机是唯一的,与当时的时间有关,然后客户机把它的纯文本口令附加到从服务器接收到的字符串之后,然后计算出结果字符串的 MD5 单出函数消息摘要,客户机把用户名与 MD5 消息摘要作为 APOP 命令的参数一起发送出去。一开始便是客户端与服务器的连接,端口设为 POP3 协议默认的 110。 客户端连接服务器成功后,服务器会返回以下信息: +OK 字符+OK 是 POP3协议的返回信息。它的回应信息不像 SMTP 协议那样用丰富多变的数字表示,只有两个:+OK 或者-ERR。其中,+OK 表示连接成功,而-ERR 则表示连接失败。 接下来,客户端输入 USER 该命令告诉服务器你的用户名。注意,有些服务器会区分大小写字母的。服务器返回+OK 后,客户端输入 PASS 服务器返回+OK 后,还返回一些邮箱的统计信息,比如:+OK 1 message(s) 1304 byte(s) 不同的服务器返回的信息格式不太一样,所以我们可以用STAT 命令来查看邮箱的情况。STAT 命令的回应中有两个数字,分别表示邮件的数量和邮件的大小。如果信箱里有信,就可以用 RETR 命令来获取邮件的正文。