Alice 正在向 Bob 发送一封电子邮件。它不知何故包含了一些大型静态内容。根据我对电子邮件的基本理解,您可以发送 HTML 消息,因此假设 HTML 包含一个图像标签<img src="dogpics.com/assets/dog.jpg" width="500" height="600">
。
- Alice 的邮件用户代理向她的邮件传输代理 (MTA) 发送一条消息
- 她的 MTA 通过其他一些 MTA 将其转发(?)
- 到达目的地MTA
- 目标 MTA 将邮件传递到可以到达 Bob 的邮件投递代理
- Bob 的邮件用户代理将在下次运行时获取该消息
当消息从 Alice 传到 Bob 时,相当大的静态文件会发生什么情况?
目标 MDA 是否会保存文件本身并成为此图像的新主机?例如,将 HTML 重写为src="destinationMDA.com/assets/x123x1nj4xn1i4.jpg"
或者静态文件仍然被托管dogpics.com
,并且只有当 Bob 打开他的 MUA 并阅读消息时才会被检索?
但它听起来消息主体也可以是多部分 MIME 类型。图像首次加载的位置是否取决于它是嵌入图像还是电子邮件附件(我猜可能使用 MIME 类型?)
答案1
是的,这取决于图像是如何被引用的。
你能将图像放入 MIME 格式的消息中,并cid:
按照RFC 2392。然后,图像与邮件的其余部分一起传输,处理邮件的每个人也可以直接访问图像而无需进一步检索 - 只要没有人删除附件,它就是邮件的一部分。对于具有单个 html 部分的邮件,将图像直接嵌入data:
URI 中的工作原理类似,尽管对于不呈现 html 部分的 MUA 来说是不可见的。
你也能链接图像以便稍后检索,并使用 MUA 使用的通用协议(通常是)引用它https:
。然后,处理邮件的每个软件可能会单独检索图像 - 并且根据收件人的配置,是的,电子邮件可能会更改为引用外部资源的缓存版本,而不是发件人提供的 URL。一种常见的设置是收件人 MTA 下载图像,检查其中是否存在不适当的内容(无论是否勒索软件),并重写邮件,使其不再包含任何外部引用。
如果消息没有被重写和如果收件人的 MUA 配置为获取外部资源,则下载甚至可能在收件人打开邮件时发生(如果没有缓存,则可能在以后多次发生)。这种简单的方法很常见,但由于它通常用于通知发件人何时、以何种频率以及从何处获取外部资源,因此它不再是典型的(可以将其视为非自愿的已读回执)。
答案2
这里有两种不同的情况:一种是引用 HTML 消息正文中的某些媒体(狗图像),另一种是以附件的形式随消息发送一些数据块。
在第一种情况下,SMTP(以及实际上涉及的任何其他协议,如 IMAP、POP3、LMTP)根本不关心图像。完全由接收方的 MUA 来理解邮件正文,这意味着它会尝试呈现 HTML,并在呈现 HTML 的同时使用 HTTP 检索图像,就像任何 Web 浏览器一样。
第二种情况是发送者将她/他存储在本地机器上的狗图像直接附加到邮件中。这形成了一个多部分消息,其中该图像的二进制数据以某种文本形式(通常是 base64 或所谓的 quoted printable)编码并放置在邮件正文的某个位置。您可以在以下位置找到有关此内容的更多信息RFC 2045以及以下四个 RFC。如果您的 MUA 具有“将消息另存为...”功能,它可能会以 eml 格式存储消息,这实际上正是上述 RFC 所描述的。如果您创建并保存这些消息,然后使用您最喜欢的文本编辑器打开它们,这可能会给您一些启发。