邮件服务常用SMTP、POP3、MIME等三种协议

  电子邮件因简洁、方便,已成为目前互联网最成功的一种应用。互联网上有成千上万的邮件服务器为用户提供服务。每个服务器上有几十至几百万个或更多的用户邮箱,用户通过用户代理(如FoxMail、MS Express)收发邮件,邮件内容除通常的文字信息外,还可附加图象、音频、视频等信息。
 
  保证邮件交换正常使用的是SMTP、POP3、MIME等协议。在邮件服务器上,一般使用文件系统来存储用户邮件。发送的服务器和接收的邮件服务器可以不是同一台。同一域的邮件服务器可采用分布式结构组成服务器群。邮件服务器还可定义邮箱别名进行转发。  

  1.SMTP(简单邮件传输协议)

  1982年制定了SMTP(RFC 821)和邮件报文格式RFC 822。SMTP描述了两个进程之间如何交换信息,邮件报文格式规定了邮件的具体格式。

  邮件由首部和主体构成,主体部分是邮件的内容,首部由关键字、冒号及关键信息组成,典型首部如下:

  Date:

  From: a@b.c.d

  To:abc@def.ghi.jkl; 123@456.789

  Subject: abcdefg

  CC: aa@bb.cc.dd

  BCC: 1@2.3.4

  Reply-To:

  用SMTP收发邮件的过程为:建立TCP连接(服务端口号25),传送邮件,释放连接。

  传送邮件的命令:

  如果DATA命令被接收,接收方返回一个354 Intermediate应答,并认定以下的各行都是信件内容。当信件结尾收到并存储后,接收者发送一个250 OK应答。因为邮件是在传送通道上发送,因此必须指明邮件内容结尾,以便应答对话可以重新开始。SMTP通过在最后一行仅发送一个句号来表示邮件内容的结束,在接收方,一个对用户透明的过程将此符号过滤掉,以不影响正常的数据。

  HELO <SP> <domain> <CRLF>

  MAIL <SP> FROM:<reverse-path> <CRLF>

  RCPT <SP> TO:<forward-path> <CRLF>

  DATA <CRLF>

  RSET <CRLF>

  SEND <SP> FROM:<reverse-path> <CRLF>

  SOML <SP> FROM:<reverse-path> <CRLF>

  SAML <SP> FROM:<reverse-path> <CRLF>

  VRFY <SP> <string> <CRLF>

  EXPN <SP> <string> <CRLF>

  HELP [<SP> <string>] <CRLF>

  NOOP <CRLF>

  QUIT <CRLF>

  TURN <CRLF>

   

  传送邮件的应答:

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

  501 参数格式错误

  502 命令不可实现

  503 错误的命令序列

  504 命令参数不可实现

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

  214 帮助信息

  220 <domain> 服务就绪

  221 <domain> 服务关闭传输信道

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

  250 要求的邮件操作完成

  251 用户非本地,将转发向<forward-path>

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

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

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

  551 用户非本地,请尝试<forward-path>

  452 系统存储不足,要求的操作未执行

  552 过量的存储分配,要求的操作未执行

  553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)

  354 开始邮件输入,以<CRLF>.<CRLF>结束

  554 操作失败

   

  例子:

  R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA

  R: 250 BBN-UNIX.ARPA

  S: MAIL FROM:<Smith@USC-ISIF.ARPA>

  R: 250 OK

  S: RCPT TO:<Jones@BBN-UNIX.ARPA>

  R: 250 OK

  S: RCPT TO:<Green@BBN-UNIX.ARPA>

  R: 550 No such user here

  S: RCPT TO:<Brown@BBN-UNIX.ARPA>

  R: 250 OK

  S: DATA

  R: 354 Start mail input; end with <CRLF>.<CRLF>

  S: Blah blah blah...

  S: ...etc. etc. etc.

  S: .

  R: 250 OK

  S: QUIT

  R: 221 BBN-UNIX.ARPA Service closing transmission channel

   

  2.POP3(邮局协议)

  1984年制定了POP(RFC 918),以后完善为POP3(RFC 1939)。用取邮件的过程为:建立TCP连接(服务端口号110),取邮件,释放连接。命令与应答类似于SMTP。见下表:

  命令格式

  参数

  响应

  USER name

  指定邮箱的字符串,这对服务器至关重要

  +OK:有效邮箱;

  -ERR:无效邮箱

  PASS string

  口令

  +OK:邮件锁住并已经准备好;

  -ERR无效口令或无法锁住邮件

  (因为此命令只有一个参数,因此空格不再作为分隔符,而作为口令的一部分)

  STAT

  (无)

  “确认”响应,空格,以八进制表示的邮件数目,空格和邮件大小。

  LIST [msg]

  信件数目(可选),如果出现,不包括标记为删除的信件。

  如果给出了参数,且POP3服务器返回包括上述信息的“确认”,此行称为信息的“扫描表”。

  如果没有参数,服务器返回“确认”响应,此响应便以多行给出。在初始的+OK后,对于每个信件,服务器均给出相应的响应。

  RETR msg

   

  如果服务器返回“确认”,给出的响应是多行的。在初始的+OK后,服务器发送与给定信息号对应的信息,对于多行响应,注意字节填充终止符。

  DELE msg

   

  服务器将此信件标记为删除,以后任何关于此信件的操作就会产生错误。

  NOOP

  (无)

  服务器仅返回“确认”。

  RSET

  (无)

  所有被标记为删除的信件复位,服务器返回“确认”。

  QUIT

  (无)

  服务器删除所有标记为删除的信件,然后释放排它锁,并返回这些操作的状态码。最后TCP连接被中断。

  TOP msg n

  一个是未被标记为删除的信件数,另一个是非负数(必须提供)

  如果服务器返回“确认”,响应是多行的。在初始的+OK后,服务器发送信件头,一个空行将信件头和信件体分开,对于多行响应要注意字节填充终止符。

  注意:如果客户要求的行数比信件体中的行数大,服务器会发送整个信件。

  UIDL [msg]

  信件数(可选)。

  如果给出了参数,且POP3服务器返回包括上述信息的“确认”,此行称为信息的“独立-ID表”。

  如果没有参数,服务器返回“确认”响应,此响应便以多行给出。在初的+OK后,对于每个信件,服务器均给出相应的响应。

  APOP name digest

  指定邮箱的字串和MD5算法生成的密码串。

  USER/PASS存在泄密的可能性。

  实现APOP命令的服务器包括一个标记确认的时间戳。例如:在UNIX上使用APOP命令的语法为:process-ID.clock@hostname,其中进程-ID是进程的十进制的数,时钟是系统时钟的十进制表示,主机名与POP3服务器名一致。客户记录下此时间戳,然后以送APOP命令。

   

  例子:

  S: <等待连接到TCP端口110>

  C: <打开连接>

  S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>

  C: APOP mrose c4c9334bac560ecc979e58001b3e22fb

  S: +OK mrose'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 200

  S: .

  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

  S: <服务器发送信件2>

  S: .

  C: DELE 2

  S: +OK message 2 deleted

  C: QUIT

  S: +OK dewey POP3 server signing off (maildrop empty)

  C: <关闭连接>

   

  3.MIME(通用因特网邮件扩充协议)

  1993年制定了RFC1521,1522。后增加了RFC 2045,2046。

  MIME在原来 RFC 822定义的信头的基础上新增了一些信头,用于让接收方了解正文的结构。 RFC 2045描述了MIME,正文内容仍然可以使用ASCII文本行。另一方面,MIME为非 ASCII报文定义了几种编码规则。以下所示为一 MIME邮件的信头,可以看出,除了原 RFC 822定义的信头外,还含有MIME新增加的信头:Mime Version、Content Type、Content Transfer En-coding、Content Disposition。

  Return Path:〈ajfan@cs.ecnu.edu.cn

  Received:from i575.cs.ecnu.edu.cn by cs.ecnu.

  edu. cn(4. 1 / SMI 4. 1 )

  id AA0 6 1 1 5;Mon,1 7Aug981 6∶ 3 7∶ 1 1 CDT

  Message Id:〈3 5D7CEA8. 1 CB1 @ cs. ecnu. edu. cn〉

  Date:Mon,1 7Aug1 9981 5∶ 3 3∶ 1 2 +0 90 0

  From:ajfan〈ajfan@ cs. ecnu. edu. cn〉

  Reply To:ajfan@ cs. ecnu. edu. cn

  X Mailer:Mozilla 3 . 0 (Win95;I)

  Mime Version:1 . 0

  To:aifan@ cs. ecnu. edu. cn

  Subject:paper

  Content Type:application/ octet stream;name=″

  Email3 . doc″

  Content Transfer Encoding:base6 4

  Content Disposition:attachment;filename=″

  Email3 . doc“

   

  MIME把五个新的头域增加入 Internet E-mail报文中,即MIME Version、Con-tent Type、Content Transfer Encoding、Content ID和 Content Descripton。MIME Version(MIME版本 )规定了代理所支持的 MIME版本。通过识别用于产生报文的 MIME版本,MIME Version域可以防止用户使用不兼容的 MIME版本误译 MIME报文。

  Content Type规定了报文体的类型,RFC 2045定义了7种类型:Text,Applica-tion、Image、Audio、Video、Message和Multipart,其中Message和Multipart为复合类型,其余为简单类型,每种类型都有一个或多个子类型,类型与子类型中间以斜杆“/”分隔。 RFC 2046对各种类型作了详细规定。此外,MIME还允许扩展定义新的内容类型。

  Content Transfer Encoding指出正文在传输过程中使用的编码。NVT ASCII是 Internet E mail 报文的缺省格式。

  Content ID和Content Description头域是可选的。用户代理可用 Content ID值识别 MIME入口。

  Content Description允许用户增加关于报文体内容的说明性信息。

  MIME定义了 7种主要报文类型:

  Text类型指一般普通文本。Text/ Richtext允许报文体中出现简单基于 SGML的标志语言。Image类型用于传送静态图片 ,GIF和JPEG是两种存储格式不同的子类型。Audio和 Video类型用于传送声音和动态图片。Video仅包含视频信息而没有声音 ,如果要传送一段包含声音的视频信息 ,则视频信息和声音要分开传送。Application类型要求在显示前获得外部处理,用户代理收到 Application/ Octet-stream类型的报文时先将其复制到一个文件中去 ,文件名可由用户决定 ,然后作进一步处理。对 Postscript子类型的报文 ,接收方只要执行其中的附录程序就可显示到来报文。Message类型允许在一个报文中嵌入另一报文 ,常用于邮件转交。

  MIME的编码方案有Q方法和Base64方法。

  (1) Q方法

  可打印的内容传输编码为少量的8位数据作为7位NVT ASCII传输提供了简单而有效的编码方法。要使用可打印编码,以将任何具有第八位设置的字符当作一个三位字符串来传输。这三位字符串通常以等号开头(=)。紧接着等号的是两位数字的十六进制(表示两个 ASCII字符),它表示被编码字符的ASCII值。例如JAMSA中的字符可编码如下:

  =4A=41 =4D=53=41

  “J”ASCII码是0x4A。“A”的ASCII十六进制是0x41等等。可打印编码把每个字符都转换成ASCII字符。例如在字母 J(ASCII 0x4A)的情况下,编码方案传输三个字节:一个等号(ASCII 0x3D),一个是数字4(ASCII 0x34),一个是字母A(ASCII 0x41)。可打印编码尽管使用简单,但编码是原数据的3倍。因此,可打印编码只对大量7位数据有益。

  (2) BASE64

  BASE64编码仅增加三分之一的报文大小,这是一种64个ASCII字符的编码方法,这64个字符分别是“A”~“Z”,“a”~“z”,“0”~“9”以及“+”和“/”。编码时,把每个连续的三个字节(24位)数据组合表示为四个六位数值(总共24位),每6位数值当作一个 ASCII字符来传输,其6位码值对应0~63。当数据不包含三字节数据块的整数倍时,这种编码方案使用等号填充数据。

   

  4.其它

  CCITT制定了功能很强的MHS标准,即X.400,但未得到广泛应用。另还有商家开发了自己独立的邮件系统,如微软的Exchange、NetWare的GroupWise等,这些系统可与Internet邮件系统交换信息,内部实现上各有特色。若需了解,可查阅相关资料。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值