用于在电子邮件中加载嵌入图像的后端协议?

问题描述 投票:0回答:1

我只是想了解这是如何工作的。假设我收到一封来自品牌或企业的营销电子邮件,并且该电子邮件包含一个或多个嵌入图像。在电子邮件中下载和查看的这些图像使用什么协议?是 ftp、smb 还是其他什么东西?我试过到处寻找,但找不到任何可以解释这部分过程的内容。谢谢。

image email protocols mime
1个回答
0
投票

您的问题定义不明确。因此,这个答案试图提供一些背景,并涵盖该背景下的多个基础。

简而言之,最简单和最可靠的解决方案是将图像作为 MIME 部分嵌入到消息本身; HTML 正文部分可以使用

cid:
协议通过他们的 MIME 引用它们
Content-Id:

更详细的阐述,还是先从历史总结开始吧。早在 1982 年的原始 RFC822 时代(及其更早的 SMTP 之前的前身),电子邮件的格式基本上被限制为 7 位 US-ASCII 纯文本(没有粗体或斜体;没有字体或图像,并且当然没有音频或动画)。

非正式地,在双方达成协议的情况下,可能会使用不同的 7 位字符集,但是,当然,不知道任何隐式协议的通信者或第三方将无法正确解码这些消息。对于某些语言,不难猜测 s|m@ ch{r{ct@rs h{d b@@n s^bstit^t@d;对于其他人,$%-35; ?-<&? +${ :!``@ '|@&=$$<

1992 年的原始 MIME 规范 RFC 1341 指定了一种向后兼容的机制,用于使用一组内容编码和附加标头在 7 位 US-ASCII 中嵌入不同的内容类型。标头将提供明确的

Content-Type:
Content-Transfer-Encoding:
以及使用多种
multipart
内容类型之一将多个有效负载捆绑到单个消息中的方法。

让我们看一个简单的演示消息来说明:

From: me <[email protected]>
To: you <[email protected]>
Subject: =?us-ascii?q?Hello_there?=
MIME-Version: 1.0
Content-type: multipart/related; boundary="moooooooo"

--moooooooo
Content-type: text/html; charset="utf-8"
Content-transfer-encoding: quoted-printable

<html><head><title>Demo</title></=
head><body><h1>Demo</h1>
<p>Look! <img src="cid:baaaaaaar.png"/>
</p></body></html>

--moooooooo
Content-type: image/png
Content-id: <baaaaaaar.png>
Content-transfer-encoding: base64

notreallyavalidimagejustsomecomputerporridge

--moooooooo--

此处跳过许多细节,我们可以观察到原始 SMTP 消息完全表示为 7 位 US-ASCII,使用允许我们嵌入 8 位字符集甚至任意二进制图像数据表示的编码。每个正文部分都有自己的一组 MIME 标头,指示其内容类型、传输编码和其他相关元数据。

这里有两种感兴趣的 MIME 机制来表示图像。上面的示例将图像作为 MIME 部分与实际图像数据一起嵌入。另一个是

Content-Location:
MIME 标头,它允许您使用任何有效的 URI 链接到在线资源。 (不过,这种机制的实际使用有限。)

还有第二层,其中特定 MIME 类型的规范可以提供额外的便利。在

text/html
的情况下,
<img>
标签的规范同样公开了一种使用任何有效 URI 链接到在线资源的机制。

(然而,在实际操作中,出于安全原因,许多电子邮件客户端对此进行了限制。广告和其他不道德或非法领域的不法分子渴望滥用此机制来收集有关其目标的信息。)

其他 MIME 类型可以提供类似的机制以通过各种方式链接到外部资源。例如,实现需要支持“鸟类”(信鸽)协议的 MIME 类型在技术上并不难。

关于各种极端情况还有很多可以说的,但我猜你会对带有

<img>
标签指向
cid:
资源的 HTML 电子邮件或熟悉的 HTML URL 协议
http:
的常见情况感到满意,
https:
ftp:
等,但需要注意的是,某些客户端将被配置为在未经接收者明确批准的情况下不会实际获取这些资源。

© www.soinside.com 2019 - 2024. All rights reserved.