我的 MIME 格式如下:
Content-Type: multipart/alternative; boundary="qawqKLHOZYgscUPhZKw5hacv=_UlERjiEj"
MIME-Version: 1.0
Date: Mon, 25 Mar 2024 10:17:34 +0800
This is a multi-part message in MIME format
--qawqKLHOZYgscUPhZKw5hacv=_UlERjiEj
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Sample HTML
--qawqKLHOZYgscUPhZKw5hacv=_UlERjiEj
Content-Type: multipart/related; type="text/html";
boundary="5SZQJxkhHuQyExC8cj=_sPNysz4gQuoIGj"
--5SZQJxkhHuQyExC8cj=_sPNysz4gQuoIGj
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
<P><STRONG>Sample HTML</STRONG></P>
<P><STRONG><IMG style=3D"HEIGHT: 184px; WIDTH: 194px" border=3D0 hspac=
e=3D0 alt=3D"" src=3D"cid:/Desktop/potato.gif" width=3D495 align=3Dbas=
eline height=3D497></STRONG></P>
--5SZQJxkhHuQyExC8cj=_sPNysz4gQuoIGj
Content-Type: image/gif;
name="/Desktop/potato.gif"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="/Desktop/potato.gif"
Content-ID: </Desktop/potato.gif>
<base 64 data>
--5SZQJxkhHuQyExC8cj=_sPNysz4gQuoIGj--
--qawqKLHOZYgscUPhZKw5hacv=_UlERjiEj--
.
如何通过将 Base64 插入 HTML 来渲染回 HTML?我正在使用的库是
TIdMessage
。出于原型设计的目的,我目前从文本文件加载 MIME。到目前为止,我只能检查 Content-Disposition
和 Content-Type
,但我不知道如何访问内容。对于 HTML,我可以使用 TIdText.Body
访问它,但是使用 TIdAttachment
时没有正文选项:
var vMsg := TIdMessage.Create(nil);
try
vMsg.LoadFromFile('D:\Desktop\Complete MIME 2.txt');
for var i := 0 to vMsg.MessageParts.Count - 1 do begin
var o := vMsg.MessageParts.Items[i];
if (o.PartType = TIdMessagePartType.mptAttachment) then begin
if o.ContentDisposition.Equals('inline') then begin
var sContentID := o.ContentID.Substring(1, o.ContentID.Length - 2);
// how to retrieve inline image base 64?
end;
end;
end;
finally
vMsg.Free;
end;
如何通过将 Base64 插入 HTML 来渲染回 HTML?
此类 HTML 期望使用引用特定 MIME 附件的
cid:
直接从 MIME 数据加载图像。要正确渲染此 HTML,您需要一个能够理解 MIME 的渲染器,或者至少为您提供一种方法来为其提供给定 cid
的图像数据。否则,您必须将附件数据保存到文件中,然后更新 HTML 以在渲染之前引用该文件。
到目前为止,我只能检查
和Content-Disposition
,但我不知道如何访问内容。对于 HTML,我可以使用Content-Type
访问它,但是使用TIdText.Body
时没有正文选项TIdAttachment
TIdAttachment
有一个 OpenLoadStream()
方法来访问其数据。 Base64 已经为您解码,因此您将获得实际图像数据的 TStream
。使用完 CloseLoadStream()
后,请致电 TStream
。