当前位置:首页 > MIME协议详解
| +-----------------------------------------------------------------+
图 错误!未定义书签。 邮件体的层次关系图
可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。什么是“至少”?举个例子说,如果只有纯文本与超文本正文,那么在邮件头中将类型扩大化,定义为multipart/related,甚至multipart/mixed,都是允许的。
multipart诸类型的共同特征是,在段头指定“boundary”参数字符串,段体内的每个子段以此串定界。所有的子段都以“--”+boundary行开始,父段则以“--”+boundary+“--”行结束。段与段之间也以空行分隔。在邮件体是multipart类型的情况下,邮件体的开始部分(第一个“--”+boundary行之前)可以有一些附加的文本行,相当于注释,解码时应忽略。段间也可以有一些附加的文本行,不会显示出来,如果有兴趣,不妨验证一下。
结合boundary定界和multipart层次关系图,我们分析一下源码中的邮件体层次与段嵌套关系。 在源码中,10-12行是附加文本行,13-82行是multipart/alternative型的段,包含两个子段:13-30行是纯文本正文,32-79行是超文本正文。
需要补充说明地是,构成邮件体的各段有自己的属性,这些属性由段头的域来说明。表 3给出了段头中常见的域。
域名 Content-Type Content-Transfer-Encoding Content-Disposition Content-ID Content-Location Content-Base
含义 段体的类型 段体的传输编码方式 段体的安排方式 段体的ID 段体的位置(路径) 段体的基位置
表 3 段头中常见的域
各域的含义与邮件头中同名的域的含义一样,只是前者的作用域为段,而后者的作用域为整个邮件体。
第3章 常见的疑问
3.1 如何得到MIME邮件的源码
在一些些功能比较完善的邮件客户端软件,如微软的Outlook Express,国产的Foxmail等,都提供了查看和保存邮件源码(原始信息)的功能。在Foxmail中,选择邮件,单击右键,选择“原始信息”菜单项可查看到邮件的源码。
第4章 分析方案
因为MIME是一种电子邮件规范,所以被广泛用在其他协议中。如SMTP和POP3协议中所谓的邮件就大部分遵循MIME邮件规范。所以虽然功能需求表中未对MIME作出要求,但当我们想要从SMTP或POP3通信等中提取有效信息时,我们不得不了解MIME协议(因为提取到的邮件信息是符合MIME规范的)。
当我们得到了SMTP或POP3通信中的MIME信息后,只需对其进行简单的MIME解码就可得到发送的原始信息。
第5章 参考资料
[1] http://dev.csdn.net/article/18/18448.shtm [Online] [2] RFC文档:RFC821对应SMTP协议,RFC822对应邮件标准,RFC1425对应ESMTP,RFC1939对应POP3协议,RFC2045-RFC2049对应MIME协议的基本内容。
[3] http://www.faqs.org/rfcs/,上面有全面的英文RFC文档 [4] http://www.cnpaf.net/,上面有不少有用的协议分析文档,也有中文RFC文档,但质量不是特别高
[5] Stevens, W.R., TCP/IP Illustrated, Vol1. Addision-Wesley, 机械工业出版社,2002
共分享92篇相关文档