NET 电子邮件.docx

上传人:b****5 文档编号:30625492 上传时间:2023-08-18 格式:DOCX 页数:37 大小:209.59KB
下载 相关 举报
NET 电子邮件.docx_第1页
第1页 / 共37页
NET 电子邮件.docx_第2页
第2页 / 共37页
NET 电子邮件.docx_第3页
第3页 / 共37页
NET 电子邮件.docx_第4页
第4页 / 共37页
NET 电子邮件.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

NET 电子邮件.docx

《NET 电子邮件.docx》由会员分享,可在线阅读,更多相关《NET 电子邮件.docx(37页珍藏版)》请在冰豆网上搜索。

NET 电子邮件.docx

NET电子邮件

目录

1引言1

1.1电子邮件介绍1

1.2开发背景2

1.3开发环境及运行环境2

2软件架构及系统用例图3

2.1系统架构3

2.2系统总体用例3

2.4发送邮件类4

2.5附加小功能类4

3SMTP协议的研究4

3.1SMTP协议简介及工作原理5

3.2SMTP协议的命令和应答6

3.2.1SMTP协议的命令6

4RFC82214

4.1RFC822简单介绍14

4.2信件的头部14

5命名控件MailSend20

5.1发送邮件类SmtpMail20

5.2AddExtra类27

5.2.1调用WindowsAPI所需的命名空间28

5.2.3在程序中具体的使用28

6软件运行时的界面29

6.1新建邮件帐号29

7系统测试32

7.1同一SMTP服务器发送邮件的测试32

7.2利用不同的SMTP服务器发送邮件的测试32

8结论34

参考文献35

致谢36

外文文献原文

译文

1引言

1.1电子邮件介绍

电子邮件(简称E-mai1)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。

它是全球多种网络上使用最普遍的一项服务。

这种非交互式的通信,加速了信息的交流及数据传送,它是—个简易、快速的方法。

通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。

到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。

电子邮件不是一种“终端到终端”的服务,是被称为“存贮转发式”服务。

这正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。

即信件发送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件立刻送到对方的信箱内,且存储在对方的电子邮箱中。

接收者可在他认为方便的时候读取信件,不受时空限制。

在这里,“发送”邮件意味着将邮件放到收件人的信箱中,而“接收”邮件则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持的—个实体。

因为电子邮件是通过邮件服务器(mai1server)来传递档的。

通常mailserver是执行多任务操作系统UNIX的计算机,它提供24小时的电子邮件服务,用户只要向mailserver管理人员申请—个信箱账号,就可使用这项快速的邮件服务。

电子邮件的工作原理:

1)电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。

电子邮件的传输是通过电子邮件简单传输协议(SimpleMailTransferProtocol,简称SMTP)这一系统软件来完成的,它是Internet下的一种电子邮件通信协议。

2)电子邮件的基本原理,是在通信网上设立“电子信箱系统”,它实际上是一个计算机系统。

系统的硬件是一个高性能、大容量的计算机。

硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信箱”,每位用户都有属于自己的—个电子信箱。

并确定—个用户名和用户可以自己随意修改的口令。

存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。

系统功能主要由软件实现。

3)电子邮件的通信是在信箱之间进行的。

用户首先开启自己的信箱,然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。

邮件在信箱之间进行传递和交换,也可以与另—个邮件系统进行传递和交换。

收方在取信时,使用特定账号从信箱提取。

1.2开发背景

当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用。

有鉴于此,在了解RFC底层协议的基础上,我们开发了这个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。

1.3开发环境及运行环境

1.3.1开发环境

AMDAthlon(TM),512M内存,80G硬盘

Microsoft®Windows™XPProfessional

Microsoft®VisualStudio2003(CSharp)

Microsoft®DeveloperNetworkforVisualStudio.NET2003

1.3.2运行环境

Intel®Pentium®2及以上处理器,32M以上内存,4G以上硬盘

Microsoft®Windows™9X/NT操作系统

800*600或以上的屏幕分辨率

确保机器上安装有.NetFrameWork1.0或者以上版本

2软件架构及系统用例图

2.1系统架构

软件的总体架构如图2.1:

主要功能选择

用户

主界面

接收邮件类

发送邮件类

图2.1软件架构图

2.2系统总体用例

图2.2系统总体用例图

2.3程序功能框图

图2.3程序功能图

2.4发送邮件类

是发送邮件的核心,类名为SmtpMail,隶属于命名空间MailSend。

封装了发送邮件的具体实现方法,也是具体的RFC用代码实现的过程。

而用户通过具体的操作接口,接口与SmtpMail类通过交互操作来实现用户发送信件的操作。

2.5附加小功能类

是获取一些诸如系统时间,当前用户名,以及本机IP之类的类,类名为AddExtra,隶属于命名空间MailSend。

3SMTP协议的研究

由于要开发的是邮件客户端程序,就不得不用到SMTP协议和POP协议。

而我个人负责的是邮件发送功能的实现,因此就必然会涉及到SMTP(SimpleMailTransferProtocol)协议。

SMTP被用来在因特网上发送邮件,该协议规定了一些基本的命令和方法使客户端与服务器进行交互,以达到发送邮件的目的。

3.1SMTP协议简介及工作原理

3.1.1介绍

简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。

SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。

理解到传送系统(或IPCE)不是一对一的是很重要的。

进程可能直接和其它进程通过已知的IPCE通信。

邮件是一个应用程序或进程间通信。

邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。

更特别的是,邮件可以通过不同网络上的主机接力式传送。

3.1.2SMTP模型

SMTP设计基于以下通信模型:

针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。

接收SMTP可以是最终接收者也可以是中间传送者。

SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。

一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。

如果SMTP接收者可以接收邮件则返回OK应答。

SMTP发送者再发出RCPT命令确认邮件是否接收到。

如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。

当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。

SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送。

为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。

MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转发路径的,它指定邮件向何处去。

向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)。

当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。

在下面,例子中可以看到哪些使用实际的命令和应答。

完整的命令和应答在第四节。

命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。

这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。

命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位被填充为0。

当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如""或"",这里尖括号表示这是一种类似于语言的变量。

3.2SMTP协议的命令和应答

3.2.1SMTP协议的命令

SMTP命令定义了邮件传输或由用户定义的系统功能。

它的命令是由结束的字符串。

而在带有参数的情况下,命令本身由和参数分开,如果未带参数可以直接和连接。

邮箱的语法格式必须和接收站点的格式一致。

下面讨论SMTP命令和应答。

发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。

回复路径就是MAIL命令的参数,而转发路径则是RCPT命令的参数,邮件日期是DATA命令的参数。

这些参数或者数据对象必须跟在命令后。

这种模式也就要求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一个转发路径缓冲区,一个邮件内容缓冲区。

特定的命令产生自己的缓冲区,或使一个或多个缓冲的内容被清除。

HELLO(HELO)

此命令用于向接收SMTP确认发送SMTP。

参数域包括发送SMTP的主机名。

接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。

引命令和OK响应确认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态表和缓冲区已经被子清除。

MAIL(MAIL)

此命令用于开始将邮件发送到一个多个邮箱中。

参数域包括回复路径。

返回路径中包括了可选的主机和发送者邮箱列表。

当有主机列表时,它是一个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机是最后一个接收到此邮件的主机)过来的。

此表也有作向发送者返回非传递信号的源路径。

因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。

一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

  RECIPIENT(RCPT)

此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。

转发路径中包括一个可选的主机和一个必须的目的邮箱。

当出现主机列表时,这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。

如果接收SMTP未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。

当邮件被传递发送时,传递主机必须将自己的名称由转发路径的开始处移至回复路径的结束处。

当邮件最终到达目的地时,接收SMTP将以它的主机邮件格式自己的名称插入目标邮件中。

例如,由传递主机A接收的带有如下参数的邮件时,

FROM:

  TO:

<@HOSTA.ARPA,@HOSTB.ARPA:

USERC@HOSTD.ARPA>

将会变成如下形式:

  FROM:

<@HOSTA.ARPA:

USERX@HOSTY.ARPA>

  TO:

<@HOSTB.ARPA:

USERC@HOSTD.ARPA>.

此命令导致它的转发路径参数加入转发路径缓冲区中。

  DATA(DATA)

接收者将跟在命令后的行作为邮件内容。

此命令导致此命令后的邮件内容加入邮件内容缓冲区。

邮件内容可以包括所有128个ASCII码字符。

邮件内容由只包括一个句号的行结束,也就是如下的字符序列:

".",它指示了邮件的结束。

邮件内容的结束指示要求接收者现在就处理保存的邮件内容。

此过程将回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区的内容全部清空。

如果操作成功,接收者必须返回OK应答;如果失败也必须返回失败应答。

当接收SMTP收到一条信息时,无论是用作转发还是此邮件已经到达目的地,它都必须在邮件内容的开始处加上时间戳这一行,这一行指示了接收到邮件主机和发出此邮件主机的标识,以及接收到邮件内容的时间和日期。

转发的信件将有多行这样的时间戳。

当接收SMTP作最后一站的传送时,它将返回路径信息行插入邮件中。

此行包括了发送命令中的的信息。

在这里,最后一站的传送的意思是邮件将被送到目的用户手中,但在一些情况下,邮件可能需要更进一步的加工并由另外的邮件系统传送。

可能在返回路径中的邮箱与实际发送的邮件不一致,这个情况可能发生在需要传送一个特定的错误处理信箱而不是信件发送者那里。

上面所述说明了,最后的邮件内容由一个返回路径行,和在其后的一个或多个时间戳行构成。

这些行后面是邮件内容的头和体信息。

当处理后面的邮件数据指示部分成功时就需要特定的说明。

这种情况可能发生在发送SMTP发现当邮件需要传送给多个用户时,只能够成功地向其中的一部分发送信息这种情况下。

在这种情况下,必须对DATA命令发送OK应答,而接收SMTP组织并发送一个"不可传递邮件"信息到信息的发送者。

在此信息中或者发送一个不成功接收者的列表,或者每次发送一个不成接收者,而发送多次。

所有不可传递邮件信息由MAIL命令发送。

返回路径和接收时间戳例子

  Return-Path:

<@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:

JOE@ABC.ARPA>

  Received:

fromGHI.ARPAbyJKL.ARPA;27Oct8115:

27:

39PST

  Received:

fromDEF.ARPAbyGHI.ARPA;27Oct8115:

15:

13PST

  Received:

fromABC.ARPAbyDEF.ARPA;27Oct8115:

01:

59PST

  Date:

27Oct8115:

01:

01PST

  From:

JOE@ABC.ARPA

  Subject:

ImprovedMailingSystemInstalled

  To:

SAM@JKL.ARPA

  Thisistoinformyouthat...

  SEND(SEND)

此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。

参数域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了。

回复路径包括一个可选的主机列表和发送者邮箱。

当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。

此表用于返回非传递信号到发送者。

因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。

一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

  SENDORMAIL(SOML)

此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者传送到邮箱中。

对于每个接收者,如果接收者终端打开,邮件内容将被传送到接收者的终端上,否则就送到接收者的邮箱中。

参数域包括回复路径,如果成功地将信息送到终端或邮箱中此命令成功。

回复路径包括一个可选的主机列表和发送者邮箱。

当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。

此表用于返回非传递信号到发送者。

因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。

一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

  SENDANDMAIL(SAML)

此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传送到邮箱中。

如果接收者终端打开,邮件内容将被传送到接收者的终端上和接收者的邮箱中。

参数域包括回复路径,如果成功地将信息送到邮箱中此命令成功。

回复路径包括一个可选的主机列表和发送者邮箱。

当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。

此表用于返回非传递信号到发送者。

因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。

一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

 RESET(RSET)

此命令指示当送邮件操作将被放弃。

任何保存的发送者,接收者和邮件内容应该被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回OK应答。

  VERIFY(VRFY)

此命令要求接收者确认参数是一个用户。

如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。

此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

  EXPAND(EXPN)

此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送列表,就返回表中的成员。

如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。

此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

HELP(HELP)

此命令导致接收者向HELP命令的发送者发出帮助信息。

此命令可以带参数,并返回特定的信息作为应答。

此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

  NOOP(NOOP)

此命令不影响任何参数和已经发出的命令。

它只是说明没有任何操作而不是说明接收者发送了一个OK应答。

此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

  QUIT(QUIT)

此命令指示接收方必须发送OK应答然后关闭传送信道。

接收方在接到QUIT命令并做出响应之前不应该关闭通信信道。

发送方在发送QUIT命令和接收到响应之前也不应该关闭信道。

即使出错,也不应该关闭信道。

如果连接被提前关闭,接收方应该象接收到RSET命令一样,取消所有等待的操作,但不恢复原先已经做过的操作。

而发送方应该象接收到暂时错误(4XX)一样假定命令和操作仍在支持之中。

  TURN(TURN)

此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信息并保持自己的角色。

如果程序A现在是发送SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了接收SMTP。

程序A就进入初始状态,好象通信信道刚打开一样,这时它发送220准备好服务信号。

如果程序B现在是接收SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了发送SMTP。

程序A就进入初始状态,好象通信信道刚打开一样,这时它准备接收220准备好服务信号。

若要拒绝改变角色,接收方可以发送502应答。

对于这些命令的顺序有一定的限制。

对话的第一个命令必须是HELLO命令,此命令在此后的会话中也可以使用。

如果HELLO命令的参数不可接受,必须由返回一个501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。

NOOP,HELP,EXPN和VRFY命令可以在会话的任何时候使用。

MAIL,SEND,SOML或SAML命令开始一个邮件操作。

一旦开始了以后就要发送RCPT和DATA命令。

邮件操作可以由RSET命令终止。

在一个会话中可以有一个或多个操作。

如果在操作开始参数不可接受,必须返回501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。

如果操作中的命令顺序出错,必须返回503失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。

会话的最后一个命令必须是QUIT命令。

此命令在会话的其它时间不能使用。

COMMAND语法格式

命令是由命令码和其后的参数域组成的。

命令码是四个字母组成的,不区别大小写。

因为下面的命令的作用是相同的:

  MAILMailmailMaIlmAIl

这对于引导任何参数值的标记也是适用的,如TO和to就是一样的。

命令码和参数由一个或多个空格分开。

然而在回复路径和转发路径中的参数是区别大小写的。

特别是在一些主机上,"smith"和"Smith"就根本不是一个用户。

参数域由不定长的字符串组成,它由结束,接收方在完全接收到此序列前不会采取任何行动。

方括号代表可选的参数域。

如果不选择的话,系统选择默认的设置。

下面是SMTP命令:

HELOMAILFROM:

RCPTTO:

DATA

RSET

SENDFROM:

SOMLFROM:

SAMLFROM:

VRFY

EXPN

HELP[]

NOOP

QUIT

TURN

3.2.2SMTP的应答码

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

每个命令必须有且只有一个响应。

SMTP响应由三位数字组成,其后跟一些文本。

数字帮助决定下一个应该进入的状态,而文本对人是有意义的。

三位的响应已经包括了足够的信息,不用再阅读文本,文本可以直接抛弃或者传递给用户。

特别的是,文本是与接收和环境相关的,所以每次接收到的文本可能不同。

在附录E中可以看到全部的响应码。

正规的情况下,响应由下面序列构成:

三位的数字,,一行文本和一个,或者也可以是一个多行响应。

只有EXPN和HELP命令可以导致多行应答,然而,对所有命令,多行响应都是允许的。

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

501参数格式错误

502命令不可实现

503错误的命令序列

504命令参数不可实现

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

214帮助信息

220服务就绪

221服务关闭传输信道

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

250要求的邮件操作完成

251用户非本地,将转发向

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

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

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

551用户非本地,请尝试

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1