基于cs的电子邮件简单收发系统设计与实现

基于cs的电子邮件简单收发系统设计与实现[java毕业论文下载]

基于C/S的电子邮件简单收发系统设计与实现

摘  要

电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大用户接受。早期的电子邮件只是从一个计算机终端向另外一个计算机终端传送文本信息,而现在的电子邮件不仅可以发送文本信息,还可以传送声音、图片、文档等多种信息。很多邮件邮件客户端软件不断地被用户利用起来,例如outlook,

Foxmail,但是这些邮件客户端对于很多用户来说却过于复杂。

为了方便用户快捷地收发邮件,本课题利用SMTP协议和POP3协议,经过前期对系统的需求分析和对相关协议的了解,设计并实现了简单的电子邮件收发系统。为了保证本系统功能的完整性,在实现该系统过程中,设计了邮件用户注册模块,当用户首次使用本系统时,须注册一个邮件账号,然后才能进行其他的操作。作为一个电子邮件客户端,邮件的发送与收取是其核心功能,本系统邮件发送块实现电子邮件的发送,支持邮件的单个发送和群发,在邮件收取块,实现了电子邮件的简单收取。另外还增加了地址薄管理块让用户更方便地管理自己的联系人,对联系人进行添加、修改、删除等。

 

关键词:电子邮件;SMTP;POP3;邮件收发系统

 

Design and Implementation of Simple Email Receiving and Sending System Based on C/S

Abstract

Email is the communication 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 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 and 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 sending 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 引言 1

1.1 邮件客户端相关介绍 1

1.2 课题背景 1

1.3 现状分析 1

2 电子邮件相关协议 2

2.1 RFC822邮件格式 2

2.2 SMTP协议 2

2.2.1 SMTP协议简介 2

2.2.2 SMTP的命令与应答 3

2.3 POP3协议 5

2.3.1 POP3协议简介 5

2.3.2 POP3的命令和应答 6

3 系统需求分析 7

3.1 功能需求 7

3.1.1 邮件发送需求 8

3.1.2 邮件接收需求 8

3.1.3 附加功能需求 8

3.2 研究思路 8

3.2.1 用户注册块 8

3.2.2 邮件发送块 8

3.2.3 邮件接收块 8

3.2.4 地址薄管理块 8

4 系统总体功能模块和系统总体流程 8

4.1 系统总体功能模块 8

4.2 系统流程 9

5 系统功能实现 9

5.1 新建账号模块 9

5.1.1 模块功能 9

5.1.2 核心实现 9

5.1.3 运行界面 10

5.2 发送邮件模块 11

5.2.1 模块功能 11

5.2.2 核心实现 11

5.2.2 运行界面 15

5.3 接收邮件模块 16

5.3.1 模块功能 16

5.3.2 核心实现 16

5.3.3 运行界面 16

5.4 地址薄模块 17

5.4.1 模块功能 17

5.4.2 核心实现 17

5.4.3 运行界面 21

6 系统功能测试 21

6.1 发送邮件测试 21

6.2 接收邮件测试 22

6.3 地址薄管理测试 23

6.4 测试结果 24

结    论 24

参考文献 25

致    谢 26

声    明 27

 

 

引言

1.1 邮件客户端相关介绍

电子邮件(Electronic Mail、E-mai1)又称电子信箱,它是—种用电子手段提供信息交换的通信方式,是应用于网络上的使用最广泛的网络功能之一。到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mail不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。电子邮件不是“终端到终端”的服务,而是被称为“存贮转发式”的服务。“存贮转发式”正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。电子邮件的发送几乎是即时的并且可以一次发送给多个人,发送和接收主要通过SMTP协议和POP3协议来实现,经过几十年的发展,电子邮件系统已经形成了完善的技术体系。

电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。电子邮件系统采用“存储转发”的机制来完成电子邮件的收发。邮件服务器处理发送和接收消息的事项,并在处理电子邮件的过程中与其他机器进行通信。

 

图1工作流程图

1.2 课题背景

随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大网民接受。在了解RFC底层协议的基础上,本课题开发了这个功能相对简单实用的邮件客户端程序。

1.3 现状分析

电子邮件来源于专有电子邮件系统,早在Internet流行以前,电子邮件就已经存在了,是在主机-多终端的主从式体系中从一台计算机终端向另一台计算机终端传送文本信息的相对简单的方法下发展起来的。经历了漫长的过程之后,它现在已经演变成为一个更加复杂并丰富得多的系统,可以传送声音、图片、图像、文档等多媒体信息,以至于如数据库或账户报告等更加专业化的文件都可以以电子邮件附件的形式在网上分发。现在,电子邮件已成为许多商家和组织机构的生命血脉,用户可以通过电子邮件的讨论会进行项目管理,并且有时还根据快速而且跨洲际的电子邮件信息交换进行重要的决策行动。毫无疑问的是,Internet扩展了其应用的范围,过去只能在其局域网上进行交谈的公司现在可以通过网络与他们的客户、竞争伙伴与世界上的任何人进行通信和交流。一旦某个组织的电子邮件系统运行在支持TCP/IP协议的网络上或具有支持两个Internet邮件服务协议SMTP(简单邮件传输协议)和POP(邮局协议)之一的Internet网关,它的邮件用户就能够连接到任何具有相似连接的电子邮件地址上了,并且不论其电子邮件账户在何处。

电子邮件相关协议

开发邮件客户端程序,就不得不用到RFC822邮件格式、SMTP协议和POP3协议。RFC822定义了用于电子邮件报文的格式,即RFC822定义了POP3、SMTP以及其他电子邮件传输协议所提交、传输的内容;POP3是因特网上传输邮件的第一个协议,也是一个离线协议;SMTP是Internet上传输电子邮件的标准协议,用于提交和传送电子邮件,规定了主机之间传输电子邮件的标准交换格式和邮件在链路层上的传输机制。

2.1 RFC822邮件格式

RFC822中对电子邮件的格式加以定义,内容全部由ASCII字符组成,就是通常所说的文本文件,因而标准将它称为Internet文本信件(Internet Text Messages)。为了支持多媒体文档的传输,1996年又发表了一系列的关于MIME(Multipurpose Internet mail Extensions)格式的定义。RFC822定义的邮件格式由两部分组成:邮件头(也称信封)和邮件内容。邮件头包括与传输、投递邮件有关的信息;邮件内容包括标题和正文。

2.2 SMTP协议

SMTP( Simple Mail Transfer Protocol)简单邮件传输协议,是目前使用最广泛的发送电子邮件的协议。SMTP通常用于把电子邮件从客户机传输到服务器,以及从某一服务器传输到另一个服务器。

2.2.1 SMTP协议简介

简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),该环境可以包括一个网络,几个网络或一个网络的子网。传送系统(或IPCE)不是一对一的,进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信,邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送,更特别的是,邮件可以通过不同网络上的主机进行接力式传送。

SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。

一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。

SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;当两者不在同一个传送服务下时,通过中继SMTP服务器传送,为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。

SMTP的工作过程有一下几个过程有:(Mail)基本发送过程,向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换等。

2.2.2 SMTP的命令与应答

SMTP定义了14个命令,它们是:

HELO <SP> <domain> <CRLF>

MAIL <SP> FROM:<reverse-path> <CRLF>

RCPT <SP> TO:<forward-path> <CRLF>

DATA <CRLF>

RSET <CRLF>

SEND <SP> FROM:<reverse-path> <CRLF>

SOML <SP> FROM:<reverse-path> <CRLF>

SAML <SP> FROM:<reverse-path> <CRLF>

VRFY <SP> <string> <CRLF>

EXPN <SP> <string> <CRLF>

HELP [<SP> <string>] <CRLF>

NOOP <CRLF>

QUIT <CRLF>

TURN <CRLF>

其中使得SMTP工作的基本的命令有7个,分别为:HELO,MAIL,RCPT,DATA,REST,NOOP和QUIT。下面分别介绍如下:

HELO--发件方向收件方问候,命令后面是发件人的服务器地址或标识。收件方回答OK时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。

MAIL--这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的,这个命令会清空有关的缓冲区,为新的邮件做好准备。

RCPT --这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方;如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。

DATA--收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是"<CRLF>.<CRLF>"的行结束数据。结束行对于接收方意味着立即开始缓冲区内的数据传送,传送结束后清空缓冲区;如果传送接受,接收方回复OK。

REST--这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据、发件人数据和待传送的数据都必须清除,接收方必须回答OK。

NOOP--这个命令不影响任何参数,只是要求接收方回答OK,不会影响缓冲区的数据。

QUIT--SMTP要求接收方必须回答OK,然后中断传输。在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到OK答复前,也不得中断连接。

对SMTP命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也保证了发送SMTP知道接收SMTP的状态。每个命令必须有且只有一个响应。

SMTP响应由三位数字组成,其后跟一些文本。数字决定了下一个应该进入的状态,而文本对人是有意义的。三位的响应已经包括了足够的信息,不用再阅读文本,文本可以直接抛弃或者传递给用户。特别的是,文本是与接收和环境相关的,所以每次接收到的文本可能不同。在附录E中可以看到全部的响应码。正规的情况下,响应由下面序列构成:三位的数字<SP>,一行文本和一个<CRLF>,或者也可以是一个多行响应。只有EXPN和HELP命令可以导致多行应答,然而对所有命令,多行响应都是允许的。

SMTP协议传送邮件的应答:

500 格式错误,命令不可识别(此错误也包括命令行过长)

501 参数格式错误

502 命令不可实现

503 错误的命令序列

504 命令参数不可实现

211 系统状态或系统帮助响应

214 帮助信息

220 <domain> 服务就绪

221 <domain> 服务关闭传输信道

421 <domain> 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)

250 要求的邮件操作完成

251 用户非本地,将转发向<forward-path>

450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)

550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)

451 放弃要求的操作;处理过程中出错

551 用户非本地,请尝试<forward-path>

452 系统存储不足,要求的操作未执行

552 过量的存储分配,要求的操作未执行

553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)

354 开始邮件输入,以<CRLF>.<CRLF>结束

554 操作失败

2.3 POP3协议

POP3(Post office Protrol,邮局协议,第3版)是Internet上传输电子邮件的第一个标准协议,也是一个离线协议。POP3为客户机提供了发送信任状(用户名和密码),这样就可以规范对电子邮件的访问。POP3是绝大多数邮件收发程序使用的协议,用户接收邮件时,一般都使用该协议。

2.3.1 POP3协议简介

POP3协议适用于C/S结构的脱机模型的电子邮件协议。在POP3协议下,当客户机与服务器连接并查询电子邮件时,被客户机所指定的将被下载的邮件都将被程序下载到客户机,下载后客户机可进行读取,修改等操作,而无需与服务器进一步交互。

POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示。

服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ASCII文本+OK或-ERR指出相应的操作状态。

在POP3协议中有三种状态,即认可状态,处理状态和更新状态。

当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后重返认可状态。

 

 
 

图2  POP3协议与三种状态间的关系

 

2.3.2 POP3的命令和应答

一般情况下,大多数现有的POP3客户端与服务器执行采用ASCII明文发送用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器 进行身份确认。一旦确认成功,便转入处理状态。为了避免发送明文口令的问题,有一种新的认证方法,命令为APOP,使用APOP,口令在传输之前被加密。

当第一次与服务器连接时,POP3服务器向客户机发送一个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命令来获取邮件的正文。RETR命令的格式为: RETR <邮件编号> 如果返回结果第一行是+OK信息,则表示成功。第二行起便是邮件的正文。最后一行和SMTP协议一样,是一个单独的英文句号,表示邮件的结尾部分。把邮件存储起来后要用DELE命令删除邮箱中的邮件,否则原有的邮件会继续保留在服务器上,一旦邮件一多,你的邮箱就爆了。DELE命令的格式为: DELE <邮件编号> 如果删错了,可以用RSET命令来恢复所有已被删除的邮件。条件是你还没有退出,一旦退出,邮件便不能恢复了。全部完成以后,输入QUIT命令就可以退出POP3服务器了。

表1 pop3协议命令码

命令

参数

状态

说明

USER

用户名

认可

此命令与PASS若成功,将导致状态转换

PASS

密码

认可

— —

APOP

名字,Digest

认可

Digest是MD5的消息摘要

STAT

名字,Digest

处理

请求服务器发送回关于邮箱的统计资料,如邮件数等

UIDL

[Msg#]

处理

返回邮件的统一标志符,POP3会话的每一个标志符都是唯一的

LIST

[Msg#]

处理

返回邮件数量和每个邮件的大小

RETR

[Msg#]

处理

返回由参数标志的邮件的全部文本

DELE

[Msg#]

处理

服务器把由参数标识邮件记为删除,由QUIT命令执行

RSET

[Msg#]

处理

服务器将重置所有标记为删除的邮件,用于撤消DELE命令

TOP

[Msg#]

处理

服务器返回参数标识的邮件前n行内容,n是正整数

NOOP

[Msg#]

处理

服务器返回一个肯定的响应

QUIT

[Msg#]

更新

如果服务器处于处理状态,那么进入更新状态删除任何标记为删除的邮件;若处于认可状态,结束会话,不进行更新

系统需求分析

3.1 功能需求

作为一个电子邮件客户端,其核心功能是能够发送和接收邮件,其他附加功能如地址薄管理等也是不可少的。

3.1.1 邮件发送需求

主要要求能实现邮件的发送,不仅能实现单个发送而且还能实现群发,同时要求能够发送附件。

3.1.2 邮件接收需求

要求能实现电子邮件的接收,不仅能实现邮件文本的接收而且还能实现附件的接收,同时具有提示发件人,接收日期。

3.1.3 附加功能需求

附件功能主要有地址薄管理,用户能方便地实现对联系人的管理。

3.2 研究思路

根据需求,本系统按照如下几个模块的设计的。

3.2.1 用户注册块

用户只有在注册邮件账号后才能进行其他操作。

3.2.2 邮件发送块

邮件发送块主要实现邮件的发送,包括群发以及附件的发送。

3.2.3 邮件接收块

主要实现邮件文本信息的收取,包括附件的收取,同时具有其他如发件人等信息提示功能。

3.2.4 地址薄管理块

主要是方便用户管理自己的联系人,主要是对联系人的增加,删除等。

系统总体功能模块和系统总体流程

4.1 系统总体功能模块

系统的功能模块有账号管理模块、地址薄管理模块、写邮件模块与收邮件模块。

图3 系统功能模块图

4.2 系统流程

当用户打开客户端时,需要注册一个账号进行邮件的收取等操作。

图4 流程图

系统功能实现

5.1 新建账号模块

5.1.1 模块功能

用户运行系统时,需要新建一个邮件账号,在这个信件账号的过程中,需要指定SMTP服务器以及SMTP的端口。本模块主要实现邮件账号的注册。

5.1.2 核心实现

  • 网络连接类及实例TcpClient

为TCP网络服务提供客户端连接类TcpClient实例对象tc。TcpClient类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据,而实例化的过程也是连接SMTP服务器的过程。

Privite TcpClient tc;

  • 提供用于网络访问的基础数据流及其实例 NetworkStream

此类提供访问网络的基础数据流的方法。其中最基本也是最重要的两个方法就是Write()和Read()方法。

private NetworkStream ns;

  • 一维字符串数组变量FilePath

此字符串数组主要用来存放用户选择的附件的绝对路径。

private string[] FilePath;

  • 发送接收邮件所需的基本参数

UserName;  // 用于调用发送邮件类的用户名

PassWd;    // 用于调用发送邮件类的密码

MailAddress;// 用于调用发送邮件类发送邮件人地址

AccountName; // 新建的帐户名

SmtpName; // 用于调用发送邮件类的SMTP服务器名

SmtpPort=25;

PopName; // 用于调用接收邮件的pop服务器名

PopPort=110;

5.1.3 运行界面

指定收发邮件的必须参数之后,再回到系统的主界面。

 

图5 新用户注册

5.2 发送邮件模块

5.2.1 模块功能

在新建账号的过程中已经指定了邮件地址和账号名称,所以默认将以这些参数来发送邮件,通过调用参数的不同程序会自动的调用相对应的代码来执行不同的操作。本模块主要实现邮件的发送,支持文本或html形式发送,同时也支持附件的发送。

基于cs的电子邮件简单收发系统设计与实现[点击下载]

如需要全部源码,联系QQ:2812491287如需要全部源码,联系QQ:2812491287

评论