前面关于电子邮件传输的内容主要介绍了三种协议。虽然,因为Web技术的不断进步,造成类似POP3、IMAP这样的协议已经不再是必备的,但SMTP却一直是电子邮件传输的唯一协议,可是,SMTP却有一个非常大的缺陷——只支持ASCII码。
SMTP的这个缺陷和它过于古老的出身有关。在互联网发展的早期,无论是网络带宽还是设备处理能力,都与现在不可同日而语。很多协议的设计,基本上也都是遵循“够用就行”的原则。SMTP的“够用就行”很大程度上就表现为“够美国人发个信函用就行”。所以SMTP被设计成只支持ASCII码。
但是,随着互联网不断向全世界推广,要发送电子邮件的可不只是美国人。可是,只要电子邮件不是用拉丁字母组成的语言书写的,都无法通过SMTP正确发送。不要说使用大量表意文字的汉语,就是使用拉丁字母,只是在上面加上了点变音符号的法语也不行。这就大大限制了电子邮件的使用,也迫使人们探讨解决之道。
人们解决SMTP不能传输ASCII码以外字符的方式不是提出全新的协议。那样做肯定会连带着引出兼容性问题,或者会导致在旧有系统上的投入作废或者让协议为了照顾新旧系统的兼容而变得复杂。人们采取的方式是在旧的体系上打补丁。SMTP该怎么工作还是怎么工作,只能传递ASCII字符那就还让它只能传输ASCII码。对于不能传递的内容,想一套办法,让它们临时变成ASCII码,传输出去之后再从ASCII字符恢复回去。
基于这样的思想,人们便提出了多用途互联网邮件扩展(Multipurpose Internet Mail Ex⁃tensions,MIME)。首先,作为SMTP扩展和补充的MIME,提供了一套将任意数据格式转换成ASCII字符的机制,解决了使用SMTP传递任意语言乃至任意数据的问题。此外,MIME还为电子邮件应用提供了一些扩展功能。MIME定义了一些新的邮件首部字段,用以提供关于邮件主体的更多的信息。MIME定义了额外的邮件内容格式,使电子邮件不仅可以传递文字,还可以传递文件、图片等二进制、多媒体内容,具有了今天人们看到的传递各种附件的功能。
MIME为电子邮件增加了5个新的首部字段。除了“MIME-Version:”表示邮件使用了MIME并指定了版本号(现在是1.0)外,对于邮件性质说明比较基本的主要是以下两个:
(1)“Content-Transfer-Encoding:”,这个首部字段指明对字符执行什么样的编码。这个字段设置的值一般都是Base64编码。
(2)“Content-Type:”这个首部字段指明了邮件的数据类型。有效的类型有Text,Im⁃age,Audio,Video,Applications,Multipart和Message。类型下面又有多个子类型。MIME规定,“Content-Type:”后面填写的内容必须要声明类型和子类型,两者之间用斜线隔开。例如,类型可以写作“Content-Type:Image/jpeg”,这表示邮件的数据类型是JPEG格式的图片。MIME规定的可用的部分类型和子类型见表6-3,此处只列出了一小部分。(www.xing528.com)
表6-3 MIME规定的可用的部分类型和子类型
MIME把非ASCII字符转换成ASCII字符,一般用的都是Base64编码。Base64是一种把任意数据转换成64个可打印ASCII字符从而实现数据转换的算法。
首先,Base64把待转换数据的每三个字节转换成四个字节。3字节有24 bit,Base64把它们分成4份,每份有6 bit;然后在每个6 bit的高位补上两个0 bit,就得到了4 Byte。
最后,Base64再根据每个字节的取值将其替换成为ASCII字符。替换的映射关系见表6-4。经过Base64转换,任意数据都将表示成只由表中列出的64种ASCII字符表示的字符串。无论是何种语言或何种附件,都可以通过SMTP来传输。
表6-4 Base64映射关系
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。