1、让你的邮件捎上“附件”平昌县兰草小学 何梦泽电子邮件系统电子邮件系统电子邮件系统的基本概念n1972年BBN的Ray Tomlinson发明电子邮件系统并采用符号。电子邮件系统要求每个用户有一个email地址。Internet上的形式是:这里,意思为“在”。n左边是用户名或用户所使用的。邮箱所在主机通常称为邮件服务器。n右边是用户使用的。n例如清华大学的域名是,所以 就是清华的某email地址。电子邮件系统的基本概念电子邮件系统的基本概念(续续)n电子邮件系统投递邮件时,首先需要利用域名系统 将。为此先调用名字解析器,(1)从主机域名查询该域的资源记录。例如:从域 的 DNS 资源记录 MX,
2、可以得到邮件服务器域名,(2)再查询邮件服务器的IP地址,有了IP地址就知道邮件往哪里送了。n若查不到MX记录,系统就将后的主机域名作为邮件服务器域名。电子邮件系统的基本概念电子邮件系统的基本概念(续续)n电子邮件系统的一个非常有用的功能是利用所谓邮寄表()向多个用户发送同一邮件。邮寄表是一组email地址并有一个组名,也称“别名(alias)”,发给该组名的邮件会自动分发给它代表的每个email地址。n一些邮件系统的地址簿或通讯簿()有类似的功能。电子邮件系统及其协议电子邮件系统及其协议n电子邮件系统包括两个部分:(essage ransfer gent)和(ser gent)。n报文传输代
3、理MTA相当于,为用户发送和接收邮件。运行报文传输代理的主机就是,它不间断地运行,为用户接收、发送和保存邮件。n邮局用户代理,它帮助用户阅读、编辑、管理邮件。当UA按用户的命令准备好要发送的邮件后,就交给MTA。电子邮件系统及其协议电子邮件系统及其协议(续续)n在UNIX中,最常用的报文传输代理 MTA 是程序,它在后台运行,它随时准备好接收网络向本机邮箱发来的邮件,并向网上发送本机用户发出的邮件。Sendmail 安全性差,用户多时管理复杂。nDan Bernstein开发的 及Wietse Venema开发的,都希望提供更快、更安全、更容易管理的 MTA 来替换 Sendmail。电子邮件
4、系统及其协议电子邮件系统及其协议(续续)n邮件用户代理UA既可在邮件服务器运行,也可在用户的PC机上运行,前者如 UNIX 的mail或mailx,用户的PC机可以作为 UNIX 的终端登录到邮件服务器,使用mail 编辑、发送、接收、阅读邮件;后者如和,它们替你从服务器下载邮件到PC机,编辑、阅读邮件时它们独立工作,只当发送、接收邮件时才需与邮件服务器连接,这种UA称独立用户代理。n许多邮件服务器提供Web界面,UA.电子邮件系统及其协议电子邮件系统及其协议(续续)n报文传输代理之间使用简单邮件传输协议(imple ail ransfer rotocol)进行通信。n在PC机上的独立邮件用户
5、代理(如Netscape Messenger 或 Outlook Express)和报文传输代理之间的通信协议是(ost ffice rotocol-Version)或 IMAP4(Internet Message Access Protocol-Version 4)。n所以在Internet中,邮件是以 SMTP 协议传递的,到了目标邮件服务器后,再到 PC 机这最后一程是使用 POP3(或 IMAP4)传递的。电子邮件系统及其协议电子邮件系统及其协议(续续)Netscape MessengerMTApop server imap serverPOP3IMAP4Outlook Express
6、MTApop server imap serverPOP3IMAP4SMTP报文传输代理报文传输代理MTA及及SMTPnInternet报文传输代理实现协议SMTP,SMTP十分简单,它只定义邮件如何从一个“邮局”传给另一个“邮局”,只规定MTA之间的命令和回答。nMTA主要就是生成、处理、回答SMTP命令。命令回答SMTP客户SMTP服务器报文传输代理报文传输代理MTA及及SMTP(续续)n在发送邮件前,发送方要建立一条到接收方主机的TCP连接(已为SMTP服务器分配了TCP端口25)。n然后发送方发送生成的SMTP命令及邮件报文。n接收方把对命令的回答送回发送方。n邮件传送完毕后撤消连接。
7、n发送方和接收方之间的命令和回答都是可读ASCII字符串,命令和回答都有确定的语法和语义。报文传输代理报文传输代理MTA及及SMTP(续续)SMTP的最小实现包括七条命令:开始会话 开始一次邮件事务,指出邮件发送者 指出接收者开始邮件报文中止当前邮件事务无操作结束会话报文传输代理报文传输代理MTA及及SMTP(续续)发送方发送一个邮件到接收方的过程就是它们之间的一次会话,会话分连接建立、邮件传送、连接关闭三个阶段:n发送方发起并建立一条到接收方的TCP连接;n接收方回答“220.”通报自己域名;n发送方发“HELO”通报自己域名;n接收方回答“250”接收发送方域名,双方建立起通信的初始状态,
8、发送方就可传输邮件。报文传输代理报文传输代理MTA及及SMTP(续续):发送方每传送一个邮件称为一次邮件事务,是一个邮件事务的三部曲,也是发送一个邮件的过程。n发送方发命令;接收方回答“250”表示准备好接收报文,若邮箱忙回答“450”,若处理有错。报文传输代理报文传输代理MTA及及SMTP(续续)n发送方发一条或多条命令指定目标邮箱地址;对每条RCPT命令接收方回答“250”表示正确,“550”表示有错。n发送方发命令;在收到接收方的回答“354”(表示正确)后,发送方发邮件报文文本,文本的结束行只包含句点“.”。报文传输代理报文传输代理MTA及及SMTP(续续)n发送方发命令,接收方回答“
9、221”后关闭TCP连接。注意,回答主要是一个3位的十进数码:n以4和5开头的表示有错,如语法错误等。n以2和3开头的表示正确。标准对各种命令的回答数码作了详细规定。报文传输代理报文传输代理MTA及及SMTP(续续)SMTP的限制:nSMTP规定邮件报文是,在传输邮件时将8位字符的最高位置“0”(虽然TCP连接支持传输8位的字符)。n早期的实现限制邮件报文的大小不能超过64k字节。n每个报文行的最大长度是1000字符。n一个邮件的接收者不能超过100名。报文传输代理报文传输代理MTA及及SMTP(续续)扩展的SMTP(xtended):n扩展的SMTP增加了新命令,用EHLO代替HELO来开始
10、一次会话。若接收方也实现了SMTP的扩展,则对EHLO命令回答“250”。n然后在 MAIL 命令中 FROM 后可以增加参数表示DATA后面传输8位字节的MIME报文;也可增加参数(用十进制表示,单位是字节)等。SMTP的一次会话过程示例的一次会话过程示例会话是在发送方发起并建立了到接收方的TCP连接后开始的:R:220 SendmailThu,2 Sep.S:R:250- Hello ,R:250-8BITMIMER:250-SIZESMTP的一次会话过程示例的一次会话过程示例(续续)S:BODY=8BITMIMER:250 Sender and 8BITMIME okS:R:250 Re
11、cipient okS:R:354 Enter mail,end with“.”on a line by itselfSMTP的一次会话过程示例的一次会话过程示例(续续)S:张三:你好S:S:李四S:.R:250 KAA20017 Message accepted for deliveryS:R:221 closing connection邮件用户代理及邮件用户代理及POP3nPOP3允许用户通过PC机动态地检索邮件服务器上的邮件。一般它只是下载邮件,没有很多管理操作。nPOP3采用客户/服务器模式,POP3客户程序在用户的PC机上运行,POP3服务器程序在邮件服务器上运行。nPOP3协议描述
12、POP3客户和POP3服务器之间的通信,通信建立在TCP之上,POP3客户发命令,POP3服务器回答命令。邮件用户代理及邮件用户代理及POP3(续续)nPOP3服务器启动后就在TCP上侦听,准备为POP3客户服务。n当POP3客户希望使用POP3提供的服务时,它就向POP3服务器的端口110发起TCP连接请求,TCP连接建立后POP3会话开始。n首先POP3服务器向客户发送一行“欢迎”词,以后POP3会话进入第一个状态,称。邮件用户代理及邮件用户代理及POP3(续续)授权状态:n客户发送给出用户在邮件服务器上的邮箱名,若是合法用户,服务器回答“+OK”。n客户再发送给出口令。POP3服务器确定
13、用户是否有权访问该邮箱,若有权访问,服务器再次回答“+OK”,若是非法用户,服务器回答“-ERR”。nUSER和PASS命令用口令方式对用户进行授权验证。邮件用户代理及邮件用户代理及POP3(续续)事务状态:n若对用户的授权验证成功,则服务器申请资源与用户的邮箱关联,会话进入第二个状态,称为(transaction)。n在事务状态,服务器将存储的邮件分成一个个报文,并从1开始编号。n在事务状态,客户可以重复发送一些命令检索报文(RETR)、删除报文(DELE)(作删除标记)等。邮件用户代理及邮件用户代理及POP3(续续)更新状态:n当客户发出时,POP3会话从事务状态进入第三个状态,称为(up
14、date)。n在更新状态,所有有删除标记的报文被真正删去,最后关闭TCP连接,服务器释放在事务状态中申请的资源,POP3会话结束。POP3实现的命令实现的命令 命命 令令 说说 明明USER USER 给出用户邮箱名PASS PASS 给出用户口令QUITQUIT退出会话STATSTAT询问报文总数及长度LIST LIST 列出报文的长度RETR RETR 检索报文DELE DELE 对该报文作删除标记NOOPNOOP无操作RSETRSET复位操作,清除所有删除标记QUITQUIT删除所有标记”删除”的报文,关闭 TCP 连接POP3实现的命令实现的命令(续续)n前三条命令,即USER,PAS
15、S,QUIT是在授权状态下的命令。服务器验证USER和PASS命令中的参数确定是否合法用户,若是非法用户,服务器回答“-ERR”,客户再发USER命令或QUIT命令退出会话。n后七条命令,包括QUIT,是在事务状态下的命令。POP3客户和服务器会话例客户和服务器会话例S:C:S:oar pop3 server readyC:wrongidS:sorry,wrongid doesnt get his mail hereC:your_useridS:your_userid is welcome hereC:your_passwordPOP3客户和服务器会话例客户和服务器会话例(续续)S:your_
16、userids maildrop has 2 messages(320 octets)C:S:2 320C:S:2 messages(320 octets)S:1 120S:2 220S:.POP3客户和服务器会话例客户和服务器会话例(续续)C:1S:120 octetsS:报文1的内容S:.C:1S:message 1 deletedC:2S:200 octetsPOP3客户和服务器会话例客户和服务器会话例(续续)S:报文2的内容S:.C:2S:message 2 deletedC:S:oar pop3 server signing off(maildrop empty)C:S:POP3客户
17、和服务器会话例客户和服务器会话例(续续)nPOP3协议只规定用户代理如何从邮件服务器检索邮件。若POP3客户要发送邮件,则它要与邮件服务器建立一个SMTP连接,将邮件交给MTA。nPOP3用户代理有两个功能:检索邮件和发送邮件,前者用POP3协议,后者用SMTP协议。nPOP3客户也实现了SMTP客户模块,但它与 MTA上的SMTP客户模块不同。报文协议报文协议RFC822nInternet主机之间传送的。n每个报文分成两部分:(message header)和(message body),两者以一空行分隔。n报文头在报文体之前,它是一些控制信息,包括收方和发方的地址、日期等。报文体是用户邮件
18、内容,RFC只规定它是ASCII字符串。n报文头由一系列(header fields)组成,每个头字段的形式是:(field-name):(field-body)报文协议报文协议RFC822(续续)头头 字字 段段 语语 义义Return-Path:指示发送者Received:指示转发主机Message-ID:生成的报文标识Date:日期 时间邮件发出日期等From:指示邮件发送者To:指示邮件接收者Subject:邮件报文主题报文协议报文协议RFC822(续续)n每个转发报文的MTA都加上字段“:”,用 后跟转发主机,后跟接收主机及收到的时间,后跟传输协议 或。nRFC822对邮件最大的限制
19、是邮件报文体是ASCII字符流,每个ASCII字符是7位。SMTP中又规定传输邮件时将8位字节的最高位清0,这样电子邮件就不能包括和。n邮件报文格式RFC822极需扩充,提出了多用途Internet 报文扩展(ultipurpose nternet ail xtensions)。MIMEnMIME 是 RFC822 的扩展,在MIME标准中,RFC822 的报文头、报文体基本模式不变,RFC822 定义的标准头字段的语法和语义不变。nMIME增加了几个头字段,常用的是:类型/子类型MIME(续续)n邮件报文要使用各国文字及多媒体信息,可利用报文头字段“类型/子类型”指明报文体的数据类型。MIM
20、E定义了7种数据类型。Internet 邮件的默认数据类型是nMIME定义的7种数据类型中,许多类型按其本身的格式在传输中应为8位的字符串,即二进制数据。但采用SMTP,那些数据无法正确传输,头字段“”指明数据的传输编码方式。MIME传输编码传输编码base64:n是根据将(7位)。n3个字节24位,分为4个6位,每个6位二进制数是063,按 Radix-64 编码表转换成ASCII字符。n报文体末尾不足3字节,即只有16位或8位,就分别转换为3个或2个ASCII字符,再分别填充一个或两个“=”字符。所以当编码后的文本末尾为“=”或“=”时,分别指示报文内容最后一组为16位或8位。Radix-
21、64编码表编码表编码编码 字符字符 编码编码 字符字符 编码编码 字符字符 编码编码 字符字符 0 A 1 B 2 C 3 D .9 J 10 K .14 O 15 P 16 Q 17 R 18 S 19 T .25 Z 26 a .30 e 31 f 32 g 33 h 34 i 35 j .41 p 42 q .46 u 47 v 48 w 49 x 50 y 51 z 52 0 .57 5 58 6 .62 +63 /MIME传输编码传输编码quoted-printable:对每个字节的8位二进制数进行编码,28=162=256,用两个十六进制数可以对它们全部进行编码。具体规则:1.除下
22、列2,3,4指明的字符外,其余字符被编码成“=”后跟表示该字符值的两个十六进制数字。“=”是引见符。“=”本身就被表示为“=3D”。2.十进制33到126(除61外),对应可打印的ASCII字符“!”到“”(除“=”外),仍用ASCII 编码。MIME传输编码传输编码quoted-printable3.字节值为十进数9,23 时,仍分别编码为ASCII字符,(空格),若它们出现在报文行末尾,则按规则1编码。因有些MTA在报文行末尾填充空格或删除空格,这样可防止空格被删。4.RFC822规定的标准行分隔符仍编码为。5.Quoted-printable编码要求每个编码行不超过76字符(不包括末尾的
23、,对于太长的行就插入“=”来分行。MIME传输编码传输编码n在传输非 ASCII 报文时,若MTA都支持传输8位字节的 MIME 报文,则传输编码采用 最简单,否则要作转换。当报文中包含大量非 ASCII 字符时,应采用base64,否则采用quoted-printable。MIME报文类型报文类型(文本):表示报文体是文本信息,子类型有:基本子类型,表示无格式文本。:表示报文体是用超文本标记语言写的。(邮件报文):表明报文体中封装有其它邮件报文。子类型有:基本子类型,表明报文体是按RFC822封装的报文。:定义部分报文,允许太长的报文分段。MIME报文类型报文类型(续续)(图象):表示报文体
24、是静止图象,子类型:表示 jpeg 格式的压缩图象。:表示 gif 格式的压缩图象。:表示PCM编码的音频数据。:表示mpeg格式的视频数据。(应用):表示二进制数据或需要其它应用程序解释的信息。子类型有:表示二进制数据。:表示Windows的Word文档。MIME报文类型报文类型(续续)(多部):报文体由多个不同的部分组成,每个部分有独立的报文类型。多部类型有一个重要参数,即,由它指示各部的分界。每个部分以一个封装边界开始,其余从形式上类似于一个RFC822报文。子类型有mixed;alternative等。目前在邮件用户代理上允许用户在报文中附加文件作为附件,而邮件系统实际上是将报文和此文件做成multipart,第1部分是Content-Type:text/plain,第2部分可以是Content-Type:。