网络编程实用教程_第9章

更新时间:2023-05-26 17:54:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第9章 电子邮件协议与编程 本章首先介绍电子邮件系统的构成和工作 原理,然后分析简单邮件传送协议SMTP,接 着叙述RFC822规定的纯文本电子邮件信件的 格式,详细说明了MIME多媒体邮件格式扩展, 分析了接收电子邮件的POP3邮局协议,最后 给出了两个编程实例。通过本章的学习,应 当充分认识应用层协议在网络编程中的重要 性,可以说,网络编程就是应用层协议的实 现。

9.1 电子邮件系统的工作原理 9.1.1 电子邮件的特点 电子邮件(electronic mail,简称e-mail) 是因特网上使用最多的一种应用,它为用户 在因特网上设立了存放邮件的电子邮箱,发 信人可以随时将电子邮件发送到收信人的电 子邮箱,收信人也可以随时上网读取,发信 人与收信人以异步的方式通信。

9.1.2 电子邮件系统的构成 一个电子邮件系统包括三个主要的构件,即用户代理,邮件 消息传输代理,和电子邮件使用的协议。如图9.1所示:

图9.1 电子邮件系统的构成

9.1.3 电子邮件系统的实现

图9.2 电子邮件的发送与接收过程

从以上的分析可以了解电子邮件系统的特点: ①是一种异步的通信系统,不像电话,通话的双方 都必须在场。 ②使用方便,传输迅速,费用低廉,不仅能传输文 字信息,还能附上声音和图像。

③在电子邮件系统的实现中,ISP的服务器必须 7X24小时地不间断地运行,这样才能保证用户可以 随时发送和接收信件,而发送或接收电子邮件的用 户则随意。

9.2 简单邮件传送协议SMTP9.2.1 概述 简单邮件传送协议SMTP(Simple Mail Transfer Protocol)是因特网的正式标准,最初在1982年由 RFC821规定,目前它的最高版本是RFC2821。 SMTP协议采用C/S模式,专用于电子邮件的发送, 规定了发信人把邮件发送到收信人的电子邮箱的全过 程中,SMTP客户与SMTP服务器这两个相互通信的 进程之间应如何交换信息。即规定了SMTP的会话过 程。用户直接使用的是用于编写和发送的客户端软件, 而通常的SMTP服务器运行在远程站点上。客户/服务 器之间的通信是通过TCP/IP协议进行的。

9.2.2 SMTP客户与SMTP服务器之间的会话 1.SMTP会话 如图9.3,说明了SMTP客户与SMTP服务器之间的会话

图9.3 SMTP客户与SMTP服务器之间的会话

2.SMTP命令一 般 是 客 户 主 动 , 首 先 发 送 。 SMTP 客 户 发 往 SMTP服务器的信息称为SMTP命令。在RFC821中, SMTP协议规定了14种命令。 SMTP命令的一般的格式是:

命令关键字 参数 <CRLF>其中,命令关键字一般是四个字母,是一个英文动 词的缩写。参数随命令而异,命令应当以回车换行符 结束。 比如 HELO WANG <CRLF>

3.SMTP应答SMTP服务器收到命令后,返回给SMTP客户的信 息

,称为SMTP应答。客户每次发送一条SMTP命令 后,服务器给客户返回一条响应。SMTP规定了23 种响应码。 SMTP应答都是以一个响应码开头,后面接着响应 的描述信息,如果SMTP服务器不一样,响应的描述 信息可能不一样,SMTP应答的一般格式是: 响应码 响应的文本描述信息 其中,响应码为3位数字,与描述信息文本之间 有一个空格,

9.2.3 常用的SMTP命令1.SMTP客户问候SMTP服务器 命令格式:HELO 发送方的主机名 <CRLF>

2.邮件来自何处,说明发信人的电子邮件地址命 令 格 式 : MAIL <CRLF> FROM : 发 信 人 的 电 子 邮 件 地 址

3.说明收信人的电子邮件地址 命令格式:RCPT TO:收信人的电子邮箱地址 <CRLF>

4.请求发送邮件内容命令格式:DATA <CRLF>

5.空操作命令格式:NOOP <CRLF> 6.验证电子信箱是否合法

命令格式:VRFY 电子信箱地址 <CRLF>7.复位SMTP服务器 命令格式:RSET <CRLF> 8.请求服务器发回帮助信息 命令格式:HELP <CRLF> <CRLF> 9.退出会话 命令格式:QUIT <CRLF> 或者 HELP 命令关键字

9.2.4 常用的SMTP响应码 211 214 系统状态或系统帮助应答。 帮助信息

220221 250

服务就绪。服务器关闭传输通道。 请求的邮件操作已经完成。

251 用户不是本地的,将按照前向路径(forwaed-path) 转发。 354 束。 421 启动邮件输入,要求邮件文本要用两个<CRLF>结 服务不可使用,关闭传输通道。

450

没有执行请求的邮箱操作,因为信箱不可用。

451 误。 452 500 501 502 503 504 550

请求的操作已经终止,因为在处理的过程中出现了错 请求的操作没有发生,因为系统的存储空间不够, 语法错误,命令不可识别。 参数或变元中存在着语法错误。 命令不能实现。 错误的命令序列 命令的参数不能实现。 请求的操作不能发生,信箱不可用。

551 用户不在本地,请尝试发送到前向路径(forwaedpath)。 552 553 554 请求的邮件操作终止,超出存储分配。 请求的操作不能执行,因为信箱语法错误。 事务失败。

9.2.5 SMTP的会话过程SMTP客户与SMTP服务器的会话过程分为三个阶段, 先举例说明。以下每行前面的C代表SMTP客户发送 的命令,S代表服务器发回的响应。每行//后面的内 容是注释。C:HELO YE //你好!我是YE。

S:250 YE HELLO ,nice to meet you //你好!YE,很高兴见到你,有事吗?C:MAIL FROM:YE@ 址是YE@。 //我想发信,我的地

S:250 <From:YE@>,Sender, accepted //行!有信你就发吧。

//我的信要发给ZHANG@。 C:RCPT ZHANG@ //行!已经准备好。 S:250 < ZHANG@ >, Recipient ok C:DATA //我要发信件的内容了。 //发吧!结尾标志是两个回车换行符夹个英文句点。 S:354 Enter

mail, end with <CRLF>.<CRLF> C:(客户端按照电子邮件的格式发送邮件内容) //我的信已经发完了 C:(邮件内容发送完毕,发送结束标志crlf &.& crlf) //好的,你的信已经存储了。 S:250 ok, message saved C:QUIT //再见 S:221 See you in cyberspace //再见

在上面的对话过程中,粗体字部分是发送邮件的客户 端软件发送的内容,其他部分是SMTP服务器的应答 内容。从中可以明显看出SMTP会话具有以下特点:(1)会话的过程采用交互式的请求应答模式,客户 发送命令,服务器回送应答。 (2)客户发送的命令和服务器回送的应答都是纯文 本形式,有一定格式。 (3)针对客户的每个命令,服务器总要返回一定的 响应码,表示服务器是否接受或执行了客户端命令。 (4)会话过程有一定的顺序

9.2.6 使用Winsock来实现电子邮件客户与服务 器的会话(1)启动SMTP服务器,在指定的传输层端口监听 客户端的连接请求,为SMTP服务器保留的端口是25。 (2)客户端设置Winsock连接的IP地址或域名,指 定端口号,主动发出连接请求,连接到SMTP服务器。 比如,网易的SMTP服务器的域名是, 监听端口是25。 (3)服务器接收客户端的连接请求,并发回响应。 客户端应收到类似220 BigFox ESMTP service ready这样的信息, 这就说明客户端已经与服务器建 立TCP/IP连接,成功地实现了第一步。

(4)客户端和服务器分别向对方发送数据。(5)客户端或服务器分别读取自己缓冲区中的数 据。

(6)以上两步是SMTP会话的主要部分,要按照 SMTP协议的规定,按照一定顺序,客户向服务器 发送命令,服务器向客户发送应答,以上两步要多 次重复。(7)会话完毕,关闭客户端和服务器之间的连 接。

9.3 电子邮件信件结构详述9.3.1 Internet文本信件的格式标准-- RFC822 在电子邮件系统的环境中,电子邮件信件是它传 递的对象。最早规定电子邮件信件内容结构的标准是 在1982发表的,称作RFC822,至今它仍然是 Internet上电子邮件信件的当前标准。RFC822定义 了信件从主机传递到主机时需要的格式化方式。它的 主要用途是为信件提供规范化的格式,使不同类型的 网络可以相互传递电子邮件。该标准的最新文本是 RFC2822。

RFC822规定,电子邮件信件的内容全部由ASCII 字符组成,就是通常所说的文本文件,从组织上看,RFC822将信件内容结构分为信头和 信体两大部分,中间用一个空白行。 对于一行的字符数,有一个1000/80的限制规则。

对于信件的行数,RFC822没有特别的限制,

下面是一个电子邮件信件内容文本的实例,可以大致说明头 部行的形式,头部的行由关键字和冒号开始,头部和正文部 分

由空行分隔开。From: John_Q_Public@ To: 912743.253843@ Date:Fri,1 Jan 99 10:21:32 EST Subject: lunch with me? Bob Can we get together for lunch when you visit next week? I’m free On Tuesday or Wednesday – just let me know which day would prefer. john

本文来源:https://www.bwwdw.com/article/wao4.html

Top