470 likes | 598 Views
Internet 应用 - 电子邮件服务. 电子邮件系统. 电子邮件系统的基本概念 电子邮件系统及其协议 报文传输代理 MTA 及 SMTP 邮件用户代理及 POP3 报文协议 RFC822 多用途 Internet 报文扩展协议 MIME. 电子邮件系统的基本概念. 1972 年 BBN 的 Ray Tomlinson 发明电子邮件系统并采用 @ 符号。电子邮件系统要求每个用户有一个 email 地址。 Internet 上 email 地址 的形式是: 用户名 @ 主机域名 这里 @ 念作“ at” ,意思为“在”。
E N D
电子邮件系统 • 电子邮件系统的基本概念 • 电子邮件系统及其协议 • 报文传输代理MTA及SMTP • 邮件用户代理及POP3 • 报文协议RFC822 • 多用途Internet报文扩展协议MIME
电子邮件系统的基本概念 • 1972年BBN的Ray Tomlinson发明电子邮件系统并采用@符号。电子邮件系统要求每个用户有一个email地址。Internet上email地址的形式是: 用户名@主机域名 这里@念作“at”,意思为“在”。 • @左边是用户名或用户所使用的电子邮箱名。邮箱所在主机通常称为邮件服务器。 • @右边是用户使用的邮件服务器所在域的域名。 • 例如清华大学的域名是tsinghua.edu.cn,所以tsg@tsinghua.edu.cn就是清华的某email地址。
电子邮件系统的基本概念(续) • 电子邮件系统投递邮件时,首先需要利用域名系统 DNS将 email 地址中的主机域名转换成邮件服务器的IP地址。为此先调用名字解析器,(1) 从主机域名查询该域的资源记录MX。例如:从域 tsinghua.edu.cn 的 DNS 资源记录 MX,可以得到邮件服务器域名mail.tsinghua.edu.cn,(2) 再查询邮件服务器的IP地址,有了IP地址就知道邮件往哪里送了。 • 若查不到MX记录,系统就将@后的主机域名作为邮件服务器域名。@mails.tsinghua.edu.cn
电子邮件系统的基本概念(续) • 电子邮件系统的一个非常有用的功能是利用所谓邮寄表 (mailing list) 向多个用户发送同一邮件。邮寄表是一组email地址并有一个组名,也称“别名(alias)”,发给该组名的邮件会自动分发给它代表的每个email地址。 • 一些邮件系统的地址簿或通讯簿(addressbook)有类似的功能。
电子邮件系统及其协议 • 电子邮件系统包括两个部分:报文传输代理MTA(Message Transfer Agent)和邮件用户代理UA(User Agent)。 • 报文传输代理MTA相当于邮局,为用户发送和接收邮件。运行报文传输代理的主机就是邮件服务器,它不间断地运行,为用户接收、发送和保存邮件。 • 邮局用户代理UA是邮件系统的用户界面,它帮助用户阅读、编辑、管理邮件。当UA按用户的命令准备好要发送的邮件后,就交给MTA。
电子邮件系统及其协议(续) • 在UNIX中,最常用的报文传输代理 MTA 是Sendmail 程序,它在后台运行,它随时准备好接收网络向本机邮箱发来的邮件,并向网上发送本机用户发出的邮件。Sendmail 安全性差,用户多时管理复杂。 • Dan Bernstein开发的 Qmail及Wietse Venema开发的Postfix,都希望提供更快、更安全、更容易管理的 MTA 来替换 Sendmail。
电子邮件系统及其协议(续) • 邮件用户代理UA既可在邮件服务器运行,也可在用户的PC机上运行,前者如 UNIX 的mail或mailx,用户的PC机可以作为 UNIX 的终端登录到邮件服务器,使用mail 编辑、发送、接收、阅读邮件;后者如Netscape Messenger 和Outlook Express,它们替你从服务器下载邮件到PC机,编辑、阅读邮件时它们独立工作,只当发送、接收邮件时才需与邮件服务器连接,这种UA称独立用户代理。 • 许多邮件服务器提供Web界面,UA...
电子邮件系统及其协议(续) • 报文传输代理之间使用简单邮件传输协议SMTP (Simple Mail Transfer Protocol) 进行通信。 • 在PC机上的独立邮件用户代理 ( 如Netscape Messenger 或 Outlook Express ) 和报文传输代理之间的通信协议是 POP3 (Post Office Protocol-Version 3) 或 IMAP4 (Internet Message Access Protocol-Version 4)。 • 所以在Internet中,邮件是以 SMTP协议传递的,到了目标邮件服务器后,再到 PC 机这最后一程是使用 POP3(或 IMAP4) 传递的。
SMTP 电子邮件系统及其协议(续) Netscape Messenger Outlook Express POP3 IMAP4 POP3 IMAP4 pop server imap server pop server imap server MTA MTA
报文传输代理MTA及SMTP • Internet报文传输代理实现协议SMTP,SMTP十分简单,它只定义邮件如何从一个“邮局”传给另一个“邮局”,只规定MTA之间的命令和回答。 • MTA主要就是生成、处理、回答SMTP命令。 命令 MTA发送方 MTA接收方 回答 SMTP客户 SMTP服务器
报文传输代理MTA及SMTP(续) • 在发送邮件前,发送方要建立一条到接收方主机端口25 的TCP连接(已为SMTP服务器分配了TCP端口25)。 • 然后发送方发送生成的SMTP命令及邮件报文。 • 接收方把对命令的回答送回发送方。 • 邮件传送完毕后撤消连接。 • 发送方和接收方之间的命令和回答都是可读ASCII字符串,命令和回答都有确定的语法和语义。
报文传输代理MTA及SMTP(续) SMTP的最小实现包括七条命令: • HELO<主机域名>开始会话 • MAIL FROM:<发送者email地址>开始一次邮件事务,指出邮件发送者 • RCPT TO:<接收者email地址>指出接收者 • DATA开始邮件报文 • RSET中止当前邮件事务 • NOOP无操作 • QUIT结束会话
报文传输代理MTA及SMTP(续) 发送方发送一个邮件到接收方的过程就是它们之间的一次会话,会话分连接建立、邮件传送、连接关闭三个阶段: (1) 连接建立 • 发送方发起并建立一条到接收方的TCP连接; • 接收方回答“220 <本机域名>...”通报自己域名; • 发送方发“HELO <本机域名>”通报自己域名; • 接收方回答“250 …”接收发送方域名,双方建立起通信的初始状态,发送方就可传输邮件。
报文传输代理MTA及SMTP(续) (2) 邮件传送:发送方每传送一个邮件称为一次邮件事务,MAIL,RCPT,DATA是一个邮件事务的三部曲,也是发送一个邮件的过程。 • 发送方发“MAIL FROM:<发送者email地址>”命令; 接收方回答“250…”表示准备好接收报文, 若邮箱忙回答“450…”,若处理有错…。
报文传输代理MTA及SMTP(续) • 发送方发一条或多条命令“RCPT TO:<接收者email地址>” 指定目标邮箱地址; 对每条RCPT命令接收方回答“250…”表示正确,“550…”表示有错。 • 发送方发命令DATA; 在收到接收方的回答“354…”(表示正确)后, 发送方发邮件报文文本,文本的结束行只包含句点“.”。
报文传输代理MTA及SMTP(续) (3) 连接关闭 • 发送方发命令QUIT,接收方回答“221 <本机域名>…”后关闭TCP连接。 注意,回答主要是一个3位的十进数码: • 以4和5开头的表示有错,如语法错误等。 • 以2和3开头的表示正确。 标准对各种命令的回答数码作了详细规定。
报文传输代理MTA及SMTP(续) SMTP的限制: • SMTP规定邮件报文是7位的ASCII字符串,在传输邮件时将8位字符的最高位置“0” (虽然TCP连接支持传输8位的字符)。 • 早期的实现限制邮件报文的大小不能超过64k字节。 • 每个报文行的最大长度是1000字符。 • 一个邮件的接收者不能超过100名。
报文传输代理MTA及SMTP(续) 扩展的SMTP—ESMTP(Extended SMTP): • 扩展的SMTP增加了新命令EHLO,用EHLO代替HELO来开始一次会话。若接收方也实现了SMTP的扩展,则对EHLO命令回答“250”。 • 然后在 MAIL 命令中 FROM 后可以增加参数“BODY=8BITMIME”表示DATA后面传输8位字节的MIME报文;也可增加参数“SIZE=报文大小”(用十进制表示,单位是字节)等。
SMTP的一次会话过程示例 会话是在发送方发起并建立了到接收方的TCP连接后开始的: R:220 tsinghua.edu.cn ESMTP Sendmail…Thu, 2 Sep ... S:EHLO pku.edu.cn R:250 - tsinghua.edu.cn Hello pku.edu.cn, … R:250 - 8BITMIME R:250 - SIZE
SMTP的一次会话过程示例(续) S:MAIL FROM:<abc@pku.edu.cn> BODY=8BITMIME R:250 <abc@pku.edu.cn>…Sender and 8BITMIME ok S:RCPT TO:<uvw@tsinghua.edu.cn> R:250 <uvw@tsinghua.edu.cn> … Recipient ok S:DATA R:354 Enter mail, end with “.” on a line by itself
SMTP的一次会话过程示例(续) S:张三:你好 S:…… S:李四 S:. R:250 KAA20017 Message accepted for delivery S:QUIT R:221 tsinghua.edu.cn closing connection
邮件用户代理及POP3 • POP3允许用户通过PC机动态地检索邮件服务器上的邮件。一般它只是下载邮件,没有很多管理操作。 • POP3采用客户/服务器模式,POP3客户程序在用户的PC机上运行,POP3服务器程序在邮件服务器上运行。 • POP3协议描述POP3客户和POP3服务器之间的通信,通信建立在TCP之上,POP3客户发命令,POP3服务器回答命令。
邮件用户代理及POP3(续) • POP3服务器启动后就在TCP端口110上侦听,准备为POP3客户服务。 • 当POP3客户希望使用POP3提供的服务时,它就向POP3服务器的端口110发起TCP连接请求,TCP连接建立后POP3会话开始。 • 首先POP3服务器向客户发送一行“欢迎”词,以后POP3会话进入第一个状态,称授权状态。
邮件用户代理及POP3(续) 授权状态: • 客户发送USER命令给出用户在邮件服务器上的邮箱名,若是合法用户,服务器回答“+OK”。 • 客户再发送PASS命令给出口令。POP3服务器确定用户是否有权访问该邮箱,若有权访问,服务器再次回答“+OK”,若是非法用户,服务器回答“-ERR”。 • USER和PASS命令用口令方式对用户进行授权验证。
邮件用户代理及POP3(续) 事务状态: • 若对用户的授权验证成功,则服务器申请资源与用户的邮箱关联,会话进入第二个状态,称为事务(transaction)状态。 • 在事务状态,服务器将存储的邮件分成一个个报文,并从1开始编号。 • 在事务状态,客户可以重复发送一些命令检索报文(RETR)、删除报文(DELE)(作删除标记)等。
邮件用户代理及POP3(续) 更新状态: • 当客户发出QUIT命令时,POP3会话从事务状态进入第三个状态,称为更新(update)状态。 • 在更新状态,所有有删除标记的报文被真正删去,最后关闭TCP连接,服务器释放在事务状态中申请的资源,POP3会话结束。
POP3实现的命令(续) • 前三条命令,即USER,PASS,QUIT是在授权状态下的命令。服务器验证USER和PASS命令中的参数确定是否合法用户,若是非法用户,服务器回答“-ERR”,客户再发USER命令或QUIT命令退出会话。 • 后七条命令,包括QUIT,是在事务状态下的命令。
POP3客户和服务器会话例 S:<在TCP端口110等待连接> C:<打开TCP连接> S:+OK oar pop3 server ready C:USER wrongid S:-ERR sorry, wrongid doesn’t get his mail here C:USER your_userid S:+OK your_userid is welcome here C:PASS your_password
POP3客户和服务器会话例(续) S:+OK your_userid’s maildrop has 2 messages (320 octets) C:STAT S:+OK 2 320 C:LIST S:+OK 2 messages (320 octets) S:1 120 S:2 220 S:.
POP3客户和服务器会话例(续) C:RETR 1 S:+OK 120 octets S:报文1的内容 S:. C:DELE 1 S:+OK message 1 deleted C:RETR 2 S:+OK 200 octets
POP3客户和服务器会话例(续) S:报文2的内容 S:. C:DELE 2 S:+OK message 2 deleted C:QUIT S:+OK oar pop3 server signing off (maildrop empty) C:<关闭连接> S:<等待下一连接>
POP3客户和服务器会话例(续) • POP3协议只规定用户代理如何从邮件服务器检索邮件。若POP3客户要发送邮件,则它要与邮件服务器建立一个SMTP连接,将邮件交给MTA。 • POP3用户代理有两个功能:检索邮件和发送邮件,前者用POP3协议,后者用SMTP协议。 • POP3客户也实现了SMTP客户模块,但它与 MTA上的SMTP客户模块不同…。
报文协议RFC822 • Internet主机之间传送的报文是7位ASCII字符流。 • 每个报文分成两部分:报文头(message header)和报文体(message body),两者以一空行分隔。 • 报文头在报文体之前,它是一些控制信息,包括收方和发方的地址、日期等。报文体是用户邮件内容,RFC只规定它是ASCII字符串。 • 报文头由一系列头字段(header fields)组成,每个头字段的形式是: 字段名(field-name):字段体(field-body)
报文协议RFC822(续) • 每个转发报文的MTA都加上字段 “Received:”,用 from 后跟转发主机,by 后跟接收主机及收到的时间,with 后跟传输协议 smtp 或 esmtp。 • RFC822对邮件最大的限制是邮件报文体是ASCII字符流,每个ASCII字符是7位。SMTP中又规定传输邮件时将8位字节的最高位清0,这样电子邮件就不能包括多国文字和多媒体信息。 • 邮件报文格式RFC822极需扩充,提出了多用途Internet 报文扩展MIME (Multipurpose Internet Mail Extensions)。
MIME • MIME 是 RFC822 的扩展,在MIME标准中,RFC822 的报文头、报文体基本模式不变,RFC822 定义的标准头字段的语法和语义不变。 • MIME增加了几个头字段,常用的是: MIME-Version:1.0 Content-Type:类型/子类型 Content-Transfer-Encoding:7bit | 8bit |binary | base64 | quoted-printable
MIME(续) • 邮件报文要使用各国文字及多媒体信息,可利用报文头字段 “Content-Type:类型/子类型”指明报文体的数据类型。MIME定义了7种数据类型。Internet 邮件的默认数据类型是 Content-Type:text/plain;charset=us-ascii • MIME定义的7种数据类型中,许多类型按其本身的格式在传输中应为8位的字符串,即二进制数据。但采用SMTP,那些数据无法正确传输,头字段 “Content-Transfer-Encoding:...” 指明数据的传输编码方式。
MIME传输编码—base64 基数 64 编码 ( base64 ) : • 是根据Radix-64编码表将3个字节的二进制数据变换为4个可打印的ASCII字符(7位)。 • 3个字节24位,分为4个6位,每个6位二进制数是0~63,按 Radix-64 编码表转换成ASCII字符。 • 报文体末尾不足3字节,即只有16位或8位,就分别转换为3个或2个ASCII字符,再分别填充一个或两个“=”字符。所以当编码后的文本末尾为“=”或“= =”时,分别指示报文内容最后一组为16位或8位。
MIME传输编码—quoted-printable 带引见符的可打印编码(quoted-printable):对每个字节的8位二进制数进行编码,28 =162=256,用两个十六进制数可以对它们全部进行编码。具体规则: 1. 除下列2,3,4指明的字符外,其余字符被编码成“=”后跟表示该字符值的两个十六进制数字。“=”是引见符。“=”本身就被表示为“=3D”。 2. 十进制33到126(除61外),对应可打印的ASCII字符“!”到“~”(除“=”外),仍用ASCII 编码。
MIME传输编码—quoted-printable 3. 字节值为十进数9, 23 时,仍分别编码为ASCII字符<HT>,<SP>(空格),若它们出现在报文行末尾, 则按规则1编码。因有些MTA在报文行末尾填充空格或删除空格,这样可防止空格被删。 4. RFC822规定的标准行分隔符<CR><LF>仍编码为<CR><LF>。 5. Quoted-printable编码要求每个编码行不超过76字符(不包括末尾的<CR><LF>,对于太长的行就插入“=<CR><LF>”来分行。
MIME传输编码 • 在传输非 ASCII 报文时,若MTA都支持传输8位字节的 MIME 报文,则传输编码采用 8bit 最简单,否则要作转换。当报文中包含大量非 ASCII 字符时,应采用base64,否则采用quoted-printable。
MIME报文类型 1.text(文本):表示报文体是文本信息, 子类型有: • plain:基本子类型,表示无格式文本。 • html:表示报文体是用超文本标记语言写的。 2.message(邮件报文):表明报文体中封装有其它邮件报文。子类型有: • rfc822:基本子类型,表明报文体是按RFC822封装的报文。 • partial:定义部分报文,允许太长的报文分段。
MIME报文类型(续) 3.image(图象):表示报文体是静止图象, 子类型: • jpeg:表示 jpeg 格式的压缩图象。 • gif:表示 gif 格式的压缩图象。 4.audio/basic:表示PCM编码的音频数据。 5.video/mpeg:表示mpeg格式的视频数据。 6.application(应用):表示二进制数据或需要其它应用程序解释的信息。子类型有: • octet-stream:表示二进制数据。 • msword:表示Windows的Word文档。
MIME报文类型(续) 7.multipart(多部):报文体由多个不同的部分组成,每个部分有独立的报文类型。多部类型有一个重要参数,即封装边界,由它指示各部的分界。每个部分以一个封装边界开始,其余从形式上类似于一个RFC822报文。子类型有mixed;alternative等。目前在邮件用户代理上允许用户在报文中附加文件作为附件,而邮件系统实际上是将报文和此文件做成multipart,第1部分是Content-Type:text/plain…,第2部分可以是Content-Type:application/msword…。