邮件标准协议:MIME(Multipurpose Internet Mail Extensions)
2019-12-03 20:21 陈心朔 阅读(3356) 评论(0) 编辑 收藏 举报MIME(多用途互联网邮件扩展)指的是一系列电子邮件技术规范 ,主要包括 RFC 2045~2049
传统的电子邮件只能使用 ASCII 字符,导致非英文字符都不能在电子邮件中使用
而且电子邮件中不能插入二进制文件(图片/视频),也没有附件
MIME 是对传统电子邮件的一个扩展,现在已经成为电子邮件实际上的标准
MIME 标准浅析
下面是一封普通的电子邮件 Test Mail 的信件头:
从上面可以看出,这封信的发信人地址是 chen892704@163.com,收信人地址是 sqchen@coremail.cn ,邮件主题是 Test ,发送时间是 2018 年 7 月 19 日
从结构上,这封信分为三个部分:信件头 + 空行 + 信件体
MIME 对传统电子邮件的扩展表现在,它在信件头部分添加了几条语句,主要有:
这条语句标识了这封信使用了 MIME 规范,其中 1.0 的版本号是不变的,即使 MIME 本身已经升级好几次
这条语句表明了传递的信息类型,包含主要类型(primary type)和次要类型(subtype)两部分,两者之间用 “/” 分割
常见的简单类型有:
上例中出现的 multipart 类型是 MIME 邮件的重要内容,邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔
常见的 multipart 类型有三种:multipart/mixed、multipart/related 和 multipart/alternative,它们的层次关系可归纳为下图:
(详细内容参考 Multi-Part MIME Messages)
其中 boundary 表示不同信件内容的分割线,它通常是一个很长的随机字符串
下面观察一下 Test Mail 的邮件体:
从邮件体可以看出,这封邮件的内容包括四部分:
- 纯文本:Hello world
- 超文本:字体、字号等信息
- 图片:cm.jpg
- 附件:rfc2045.txt.pdf
由于电子邮件的传统格式不支持非 ASCII 编码和二进制数据,因此 MIME 规定了第三条语句:
这条语句指明了该块内容的编码转换方式,Content-Transfer-Encoding 的值有五种:7bit、8bit、binary、quote-printable 和 base64
其中 7bit 是缺省值,即不用转化的 ASCII 字符
可以注意到在图片和附件块有一行特殊的语句:
Content-Disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件
Content-Disposition 可以控制用户请求所得的内容为一个文件的时候提供默认的文件名,文件直接在浏览器上显示或者在访问文件时弹出文件下载框
content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm )
本例中,cm.jpg 会直接在浏览器中显示(inline),而 rfc2045.txt.pdf 则会以附件形式下载(attachment)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构