电子邮件协议与编程.ppt
《电子邮件协议与编程.ppt》由会员分享,可在线阅读,更多相关《电子邮件协议与编程.ppt(69页珍藏版)》请在三一办公上搜索。
1、第10章 电子邮件协议与编程 本章首先介绍电子邮件系统的构成和工作原理,然后分析简单邮件传送协议SMTP,接着叙述RFC822规定的纯文本电子邮件信件的格式,详细说明了MIME多媒体邮件格式扩展,分析了接收电子邮件的POP3邮局协议,最后给出了两个编程实例。通过本章的学习,应当充分认识应用层协议在网络编程中的重要性,可以说,网络编程就是应用层协议的实现。,10.1 电子邮件系统的工作原理10.1.1 电子邮件的特点电子邮件(electronic mail,简称e-mail)是因特网上使用最多的一种应用,它为用户在因特网上设立了存放邮件的电子邮箱,发信人可以随时将电子邮件发送到收信人的电子邮箱,
2、收信人也可以随时上网读取,发信人与收信人以异步的方式通信。,10.1.2 电子邮件系统的构成一个电子邮件系统包括三个主要的构件,即用户代理,邮件消息传输代理,和电子邮件使用的协议。如图10.1所示:,图10.1 电子邮件系统的构成,10.1.3 电子邮件系统的实现,图10.2 电子邮件的发送与接收过程,从以上的分析可以了解电子邮件系统的特点:是一种异步的通信系统,不像电话,通话的双方都必须在场。使用方便,传输迅速,费用低廉,不仅能传输文字信息,还能附上声音和图像。在电子邮件系统的实现中,ISP的服务器必须7X24小时地不间断地运行,这样才能保证用户可以随时发送和接收信件,而发送或接收电子邮件的
3、用户则随意。,10.2 简单邮件传送协议SMTP10.2.1 概述 简单邮件传送协议SMTP(Simple Mail Transfer Protocol)是因特网的正式标准,最初在1982年由RFC821规定,目前它的最高版本是RFC2821。SMTP协议采用C/S模式,专用于电子邮件的发送,规定了发信人把邮件发送到收信人的电子邮箱的全过程中,SMTP客户与SMTP服务器这两个相互通信的进程之间应如何交换信息。即规定了SMTP的会话过程。用户直接使用的是用于编写和发送的客户端软件,而通常的SMTP服务器运行在远程站点上。客户/服务器之间的通信是通过TCP/IP协议进行的。,10.2.2 SMT
4、P客户与SMTP服务器之间的会话1SMTP会话如图10.3,说明了SMTP客户与SMTP服务器之间的会话,图10.3 SMTP客户与SMTP服务器之间的会话,2SMTP命令 一般是客户主动,首先发送。SMTP客户发往SMTP服务器的信息称为SMTP命令。在RFC821中,SMTP协议规定了14种命令。SMTP命令的一般的格式是:命令关键字 参数 其中,命令关键字一般是四个字母,是一个英文动词的缩写。参数随命令而异,命令应当以回车换行符结束。比如 HELO WANG,3SMTP应答 SMTP服务器收到命令后,返回给SMTP客户的信息,称为SMTP应答。客户每次发送一条SMTP命令后,服务器给客户
5、返回一条响应。SMTP规定了23种响应码。SMTP应答都是以一个响应码开头,后面接着响应的描述信息,如果SMTP服务器不一样,响应的描述信息可能不一样,SMTP应答的一般格式是:响应码 响应的文本描述信息 其中,响应码为3位数字,与描述信息文本之间有一个空格,,10.2.3 常用的SMTP命令1SMTP客户问候SMTP服务器命令格式:HELO 发送方的主机名 2邮件来自何处,说明发信人的电子邮件地址命令格式:MAIL FROM:发信人的电子邮件地址 3说明收信人的电子邮件地址命令格式:RCPT TO:收信人的电子邮箱地址 4请求发送邮件内容 命令格式:DATA,5空操作命令格式:NOOP 6验
6、证电子信箱是否合法命令格式:VRFY 电子信箱地址 7复位SMTP服务器命令格式:RSET 8请求服务器发回帮助信息命令格式:HELP 或者 HELP 命令关键字 9退出会话命令格式:QUIT,10.2.4 常用的SMTP响应码211 系统状态或系统帮助应答。214 帮助信息220 服务就绪。221 服务器关闭传输通道。250 请求的邮件操作已经完成。251 用户不是本地的,将按照前向路径(forwaed-path)转发。354 启动邮件输入,要求邮件文本要用结束。421 服务不可使用,关闭传输通道。450 没有执行请求的邮箱操作,因为信箱不可用。,451 请求的操作已经终止,因为在处理的过程
7、中出现了错误。452 请求的操作没有发生,因为系统的存储空间不够,500 语法错误,命令不可识别。501 参数或变元中存在着语法错误。502 命令不能实现。503 错误的命令序列504 命令的参数不能实现。550 请求的操作不能发生,信箱不可用。551 用户不在本地,请尝试发送到前向路径(forwaed-path)。552 请求的邮件操作终止,超出存储分配。553 请求的操作不能执行,因为信箱语法错误。554 事务失败。,10.2.5 SMTP的会话过程SMTP客户与SMTP服务器的会话过程分为三个阶段,先举例说明。以下每行前面的C代表SMTP客户发送的命令,S代表服务器发回的响应。每行/后面
8、的内容是注释。C:HELO YE/你好!我是YE。S:250 YE HELLO,pleased to meet you/你好!YE,很高兴见到你,有事吗?C:MAIL FROM:YE163.COM/我想发信,我的地址是YE163.COM。S:250,Sender,accepted/行!有信你就发吧。,C:RCPT ZHANG/我的信要发给ZHANG。S:250,Recipient ok/行!已经准备好。C:DATA/我要发信件的内容了。S:354 Enter mail,end with./发吧!结尾标志是两个回车换行符夹个英文句点。C:(客户端按照电子邮件的格式发送邮件内容)C:(邮件内容发送
9、完毕,发送结束标志crlf&.&crlf)/我的信已经发完了S:250 ok,message saved/好的,你的信已经存储了。C:QUIT/再见 S:221 See you in cyberspace/再见,在上面的对话过程中,粗体字部分是发送邮件的客户端软件发送的内容,其他部分是SMTP服务器的应答内容。从中可以明显看出SMTP会话具有以下特点:(1)会话的过程采用交互式的请求应答模式,客户发送命令,服务器回送应答。(2)客户发送的命令和服务器回送的应答都是纯文本形式,有一定格式。(3)针对客户的每个命令,服务器总要返回一定的响应码,表示服务器是否接受或执行了客户端命令。(4)会话过程有
10、一定的顺序,10.2.6 使用Winsock来实现电子邮件客户与服务器的会话(1)启动SMTP服务器,在指定的传输层端口监听客户端的连接请求,为SMTP服务器保留的端口是25。(2)客户端设置Winsock连接的IP地址或域名,指定端口号,主动发出连接请求,连接到SMTP服务器。比如,网易的SMTP服务器的域名是,监听端口是25。(3)服务器接收客户端的连接请求,并发回响应。客户端应收到类似220 BigFox ESMTP service ready这样的信息,这就说明客户端已经与服务器建立TCP/IP连接,成功地实现了第一步。,(4)客户端和服务器分别向对方发送数据。(5)客户端或服务器分别
11、读取自己缓冲区中的数据。(6)以上两步是SMTP会话的主要部分,要按照SMTP协议的规定,按照一定顺序,客户向服务器发送命令,服务器向客户发送应答,以上两步要多次重复。(7)会话完毕,关闭客户端和服务器之间的连接。,10.3 电子邮件信件结构详述10.3.1 Internet文本信件的格式标准-RFC822 在电子邮件系统的环境中,电子邮件信件是它传递的对象。最早规定电子邮件信件内容结构的标准是在1982发表的,称作RFC822,至今它仍然是Internet上电子邮件信件的当前标准。RFC822定义了信件从主机传递到主机时需要的格式化方式。它的主要用途是为信件提供规范化的格式,使不同类型的网络
12、可以相互传递电子邮件。该标准的最新文本是RFC2822。,RFC822规定,电子邮件信件的内容全部由ASCII字符组成,就是通常所说的文本文件,从组织上看,RFC822将信件内容结构分为信头和信体两大部分,中间用一个空白行。对于一行的字符数,有一个1000/80的限制规则。对于信件的行数,RFC822没有特别的限制,,下面是一个电子邮件信件内容文本的实例,可以大致说明头部行的形式,头部的行由关键字和冒号开始,头部和正文部分由空行分隔开。From:John_Q_PTo:Date:Fri,1 Jan 99 10:21:32 ESTSubject:lunch with me?Bob Can we g
13、et together for lunch when you visit next week?Im freeOn Tuesday or Wednesday just let me know which day would prefer.john,10.3.2 信件的头部1信头的一般格式信头由若干信头字段(header field)组成。所有的信头字段包括四部分,字段名(field name),紧跟冒号:(colon),后跟字段体(field body),最后以回车换行符(CRLF)终止。即信头字段=字段名:字段体,2结构化字段和非结构化字段信头字段大体可以分为结构化字段和非结构化字段两种。结构
14、化字段有特定的格式,由语法分析程序检测。非结构化的字段含有任意的数据,没有固定格式。,3信头字段的元素尽管Email信件的总体结构非常简单,但一些信头字段的结构是很复杂的。下面介绍一些大多数字段共有的元素。(1)空白符(2)注解(3)字段折叠(4)字段大小写,4标准的信头字段(1)与发信方有关的信头字段写信人字段 说明信件的原始创建者,给出他的电子信箱地址。创建者对信件的原始内容负责。格式:From:mailbox 举例:From:,发送者字段 说明实际提交发送这个信件的人,给出他的电子信箱地址。当发信人与写信人不一样时使用。比如,秘书替经理发信。发送者对发送负责。格式:Sender:mail
15、box 举例:From:Sender:,回复字段 指定应当把回信发到哪里。如果有此字段,回信将会发给它指定的邮箱,而不会发给From字段指定的邮箱。比如,发送的是经理的信,但回信应交办公室处理。格式:Reply-TO:mailbox 举例:From:Reply-TO:,(2)与收信方有关的信头字段收信人字段 指定主要收信人的邮箱地址,可以是多个邮箱地址的列表,地址中间用逗号隔开。格式:TO:mailbox list 举例:TO:,抄送字段 指定此信件要同时发给哪些人,也称为抄送。也可以使用邮箱地址列表,抄送给多个人。格式:Cc:mailbox list 举例:Cc:密抄字段 指定此信件要同时秘
16、密发给哪些人,也称为密件抄送。也可以使用邮箱地址列表,密抄给多个人。格式:Bcc:mailbox list,(3)其它的信头字段日期字段 Date字段含有电子邮件创建的日期和时间。格式:Date:date-time 举例:Date:Tue,04 Dec 2004 16:18:08+800 信件主题字段 描述信件的主题。当回复信件时,通常在主题前面增加“Re:”前缀,标记为该信件为回复信件:当信件被转发时,通常在主题文字前面加上“Fw:”,“Fwd:”这样的前缀。格式:Subject:*text 举例:Subject:Hello!Subject:Re:Hello!,接受字段 是投递信件的特定邮件
17、服务器所作的记录。处理邮件投递的每个服务器必须给它处理的每个信头的前面加一个Received字段,用以描述信件到达目的地所经过的路径以及相关信息。当跟踪各个电子邮件问题时,这个信息很有帮助。格式:Received:from domain/发送主机by domain/接收主机via atom/物理路径id msg-id/接收者msg id举例:Received:from wang195.0.0.1 by li129.5.0.4 Tue dec 2003 12:18:02+800,注释字段 用于把一个注解添加到信件中。格式:Comments:*text 重发字段 当需要把收到的信件重发给另一组收信
18、人的时候,可以保持整个原始信件不变,并简单地产生重发信件所要求的新信头字段。为避免与以前的字段相混。新添加的信头字段都加上Resent-前缀字符串,它们的语法与未加前缀的同名字段相同。格式:Resent-*举例:Resent-From Resent-Sender Resent-date Resent-Reply-To,信件标识字段 用于表示一个信件唯一标识,该字段通常有Smtp服务器生成,这个值通常是唯一的。形式根据使用的软件而定。通常左边是标识符,右边指定计算机名。格式:Message-ID:msg-id,5扩展的信头字段如果想在信头中加入RFC822中没有规定的字段,就需要创建非标准字段。
19、方法非常简单,只要在自定义的信头字段名的前面使用X-前缀。RFC822将这种方法称为扩展字段。事实上已经有许多扩展字段被广泛应用,但没有标准定义。例如:X-LOOP字段 X-Mailer字段,6信头中必须要有的字段 在创建信件时,必须使用Date或Resent-Date字段指定创建信件的日期,必须使用From字段指定创建该信件的人或程序的信箱,必须至少使用TO、CC或Bcc中的一个,或者与它们等效的Resent-TO,Resent-CC,Resent-Bcc中的一个,来指定接收信件的人。除了这些创建信件时要求的信头以外,每个处理信件的邮件传输代理(MTA)必须在它处理的信件头部开始处加一个Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子邮件 协议 编程

链接地址:https://www.31ppt.com/p-6343997.html