5. Composite Media Type Values (复合媒体类型值)
两种复合顶级媒体类型是: multipart和message.
5.1. Multipart Media Type (多部分媒体类型)
multipart类型用于将多个body part组合成单个消息. 每个part都是一个独立的实体, 具有自己的头部和正文.
5.1.1. 通用语法
所有multipart类型共享通用语法. boundary参数是必需的:
Content-Type: multipart/mixed; boundary="----=_Part_0_123456789.987654321"
------=_Part_0_123456789.987654321
Content-Type: text/plain
First part content
------=_Part_0_123456789.987654321
Content-Type: text/html
<html>Second part content</html>
------=_Part_0_123456789.987654321--
5.1.3. Mixed子类型
multipart/mixed用于需要按顺序呈现的独立part.
用途: 邮件正文 + 附件
Content-Type: multipart/mixed; boundary="boundary123"
--boundary123
Content-Type: text/plain
邮件正文
--boundary123
Content-Type: application/pdf
Content-Disposition: attachment; filename="document.pdf"
[PDF数据]
--boundary123--
5.1.4. Alternative子类型
multipart/alternative用于同一内容的不同表示. 邮件客户端应选择最后一个它能理解的版本.
用途: 纯文本 + HTML版本
Content-Type: multipart/alternative; boundary="alt123"
--alt123
Content-Type: text/plain
纯文本版本
--alt123
Content-Type: text/html
<html><body>HTML版本</body></html>
--alt123--
5.1.5. Digest子类型
multipart/digest用于转发多个消息. 默认的part类型是message/rfc822.
5.1.6. Parallel子类型
multipart/parallel表示part应该同时呈现.
5.1.7. 其他Multipart子类型
multipart/related: 相关part (如HTML + 内嵌图片)multipart/form-data: HTML表单文件上传multipart/byteranges: HTTP范围请求
5.2. Message Media Type (消息媒体类型)
message类型用于封装另一个消息.
5.2.1. RFC822子类型
message/rfc822用于封装完整的RFC 822消息.
Content-Type: message/rfc822
From: [email protected]
To: [email protected]
Subject: Forwarded message
This is the forwarded message content.
5.2.2. Partial子类型
message/partial用于将大消息分成多个片段.
参数:
id: 唯一标识符number: 片段编号total: 总片段数
Content-Type: message/partial;
id="[email protected]";
number=1;
total=3
5.2.3. External-Body子类型
message/external-body用于引用存储在其他位置的数据.
访问类型:
ftp: FTP服务器http: HTTP URLlocal-file: 本地文件mail-server: 邮件服务器
Content-Type: message/external-body;
access-type=URL;
URL="http://example.com/file.pdf"
Content-Type: application/pdf
Content-Description: Large PDF File
典型的多层嵌套结构:
multipart/mixed (整个邮件)
├─ multipart/alternative (正文)
│ ├─ text/plain (纯文本版本)
│ └─ multipart/related (HTML版本)
│ ├─ text/html (HTML)
│ └─ image/png (内嵌图片)
└─ application/pdf (附件)
关键概念:
- boundary: 分隔符, 必须唯一
- preamble: boundary前的文本 (被忽略)
- epilogue: 最后boundary后的文本 (被忽略)
- 递归性: multipart可以包含multipart