Appearance
题目
无需转换即可由 SMTP 协议直接传输的内容是( )。
错因
A
JPEG 图形是二进制内容(每字节 0 ~ 255 的任意值,含高位字节)——SMTP 原始协议(RFC 821)只支持 7 位 ASCII 字符(每字节高位必须 0),二进制字节高位上有 1 时会被某些中继系统截断或破坏。要传 JPEG 必须先用 MIME(如 Base64)把二进制编码成 ASCII,再让 SMTP 传。
B
MPEG 视频同 A——是二进制内容,必须 Base64 等 MIME 编码后才能由 SMTP 传输。错的根源:以为"现代 SMTP 应该能直接传所有内容",没意识到 SMTP 协议本身仍是 7 位 ASCII 限制,二进制依赖 MIME 包装。
C
EXE 可执行文件同 A、B——纯二进制(含机器码 0xFF 等高位字节),必须 MIME 编码。错的根源:把"邮件能不能附 EXE"和"SMTP 协议本身能不能直传 EXE"两个层次混淆。
总解析
第一步:明确 SMTP 协议的字符集限制
SMTP(RFC 821 / 5321)是 1982 年的协议,从设计之初就规定 传输内容必须是 7 位 ASCII——每字节高位为 0,只能表达 128 个字符(英文字母、数字、标点、控制字符)。
为什么这么定:1980 年代的中继系统(IBM 大型机网关、x.25 链路等)很多只能处理 7 位字符;为了普适性 SMTP 自我限制到 7 位 ASCII。
第二步:8 位二进制内容怎么走 SMTP?
引入 MIME(Multipurpose Internet Mail Extensions,RFC 2045 ~ 2049)——一种编码层:
- 把任意二进制内容用 Base64 / Quoted-Printable 等编码方式映射成 7 位 ASCII 字符串
- 同时在邮件头里增加
Content-TypeContent-Transfer-Encoding等字段,告诉接收方如何解码
接收方用户代理收到邮件后按 MIME 头解码,恢复原始二进制内容。
逐项核对:
| 选项 | 是否纯 7 位 ASCII | SMTP 能否直传 | 需要 MIME 编码? |
|---|---|---|---|
| A JPEG | 二进制,含高位 1 字节 | ❌ 不能 | ✅ 必须 Base64 |
| B MPEG | 二进制 | ❌ 不能 | ✅ 必须 Base64 |
| C EXE | 二进制 | ❌ 不能 | ✅ 必须 Base64 |
| D ASCII 文本 | 本身就是 7 位 | ✅ 直接传 | ❌ 不需要 |
ASCII 文本(每字符高位 = 0)天然符合 SMTP 协议要求,不需要任何中间转换层。
最终答案是 D(ASCII 文本)。
编者注(生僻术语):SMTP 后续有扩展协议 8BITMIME(RFC 6152)允许 8 位字符传输,但仍不是"任意二进制都能传"——8 位仅指支持 ISO-8859 等单字节字符集,不等于 binary。真正传二进制依旧需要 MIME 编码(Base64 把 3 字节二进制编成 4 字节 ASCII,膨胀约 33%)。所以现代邮件附带的图片 / 视频,仍然都是先 Base64 编码、再被 SMTP 传输,到对端解码还原。这是为什么大附件邮件比裸文件大约 33%。