如何使用 TIdMessage 处理将内联图像分隔到不同边界的 MIME 格式?

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

我的 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;
delphi indy mime inline-images
1个回答
0
投票

如何通过将 Base64 插入 HTML 来渲染回 HTML?

此类 HTML 期望使用引用特定 MIME 附件的

cid:
直接从 MIME 数据加载图像。要正确渲染此 HTML,您需要一个能够理解 MIME 的渲染器,或者至少为您提供一种方法来为其提供给定
cid
的图像数据。否则,您必须将附件数据保存到文件中,然后更新 HTML 以在渲染之前引用该文件。

到目前为止,我只能检查

Content-Disposition
Content-Type
,但我不知道如何访问内容。对于 HTML,我可以使用
TIdText.Body
访问它,但是使用
TIdAttachment

时没有正文选项

TIdAttachment
有一个
OpenLoadStream()
方法来访问其数据。 Base64 已经为您解码,因此您将获得实际图像数据的
TStream
。使用完
CloseLoadStream()
后,请致电
TStream

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