【发布时间】:2021-01-11 18:17:18
【问题描述】:
我正在尝试在电子邮件中嵌入图像。
电子邮件是通过通过套接字向端口 25 上的 SMTP 服务器发送数据来创建的。这是 MIME 位:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=mixedsection;
--mixedsection
Content-Type: text/plain;
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Below should be an inline embedded image
--mixedsection
Content-Type: image/png; file=ts-charts.png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=ts-charts.png
iVBORw0KGgoAAAANSUhEUgAAAnoAAAHqCAMAAACk+hPgAAABpFBMVEX// (etc etc etc)
--mixedsection--
收到电子邮件后,第二部分(图像)似乎已转换为附件,并且从未内联显示。所有其他部分工作正常,图像被正确编码为 base64,因此可以打开附件。当 Content-Disposition 设置为 inline 或 attachment 时,text/plain 部分都能正常工作。
我使用过其他邮件客户端(outlook、thunderbird)嵌入图片,图片内联显示没有问题。
即使我剥离了其他所有内容,我什至无法让图像内联显示。以下内容仍作为附件收到:
MIME-Version: 1.0
Content-Type: image/png; file=ts-charts.png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=ts-charts.png
iVBORw0KGgoAAAANSUhEUgAAAnoAAAHqCAMAAAC (etc etc)
所以问题是,我在这里缺少什么,以及如何让图像内联显示?
【问题讨论】:
-
AFAIK 图像永远不会显示在文本中。纯文本无法指示图像的位置。 RFC 假设一个文本部分,加上可能的替代文本形式,如 HTML。如您所见,带有 cid 的 HTML 是显示随电子邮件发送的图像的方法。