在Delphi 7中,如何在消息正文中添加图像?

3mpgtkmj  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(169)

我正在使用Delphi 7中的Indy idMessage对象通过SMTP协议发送邮件(因此Indy版本是9)。我用html格式发送消息没有问题,但现在我想在消息正文中嵌入一个图像。我看到,这不会像放进:

<img src='C:Fooimage.png'>

在我看来,您必须初始化一个IdAttach并在html中引用它,但我无法让它这样工作。

接下来,我将保留用于创建消息正文的代码

procedure TfmMail.SendMail;
var
  IdMensaje: TIdMessage;
  smtp: TIdSMTP;
begin
  IdMensaje := TIdMessage.Create(nil);
  IdMensaje.Clear;
  IdMensaje.Body.Clear;
  IdMensaje.ContentType := 'text';
  IdMensaje.From.Text :=  'Title from email';
  IdMensaje.Body.Text := 'greeting';
  IdMensaje.ContentType := 'text/html';
  //<img src='C:Fooimage.png> -> Don't work
  IdMensaje.Body.Text := IdMensaje.Body.Text + '<p> Other text to body </p>;
bvhaajcl

bvhaajcl1#

对于Indy 9,您需要:

  • TIdMessage.ContentType属性设置为multipart/related; type="text/html"
  • TIdText对象添加到TIdMessage.MessageParts属性(而不是使用TIdMessasage.Body),该对象包含HTML内容。HTML的<img>标记可以使用src属性中的cid:<content-id>标识符来引用每个附件。
  • 为每个映像向TIdMessage.MessageParts添加单独的TIdAttachment对象,并为每个映像分配唯一的Content-ID标头。

试着这样做:

procedure TfmMail.SendMail;
var
  IdMensaje: TIdMessage;
  ...
begin
  IdMensaje := TIdMessage.Create(nil);
  try
    ...

    IdMensaje.ContentType := 'multipart/related; type="text/html"';

    with TIdText.Create(IdMensaje.MessageParts, nil) do
    begin
      ContentType := 'text/html';
      Body.Text := '... <img src="cid:myimageid"> ...';
    end;

    with TIdAttachment.Create(IdMensaje.MessageParts, 'C:Fooimage.png') do
    begin
      ContentType := 'image/png';

      ContentID := '<myimageid>';
      //
      // or, if ContentID is not available:
      //
      // Headers.Values['Content-ID'] := '<myimageid>';
      // or:
      // ExtraHeaders.Values['Content-ID'] := '<myimageid>';
    end;

    // use IdMensaje as needed ...
  finally
    IdMensaje.Free;
  end;
end;
dced5bon

dced5bon2#

1.您可以将img标记指向外部url(请记住,除非用户明确单击“下载图像”,否则默认情况下Outlook将阻止图像下载)。
1.您可以添加图像作为附件,在附件MIME部分设置它们的Content-Id MIME头(例如,设置为'xyz'),然后通过该Content-id(例如,<img src="cid:xyz">)在HTML体中引用该图像
1.第三种选择是在img标记中嵌入图像数据,但并不是所有的电子邮件客户端都理解这一点-旧版本的Outlook不会像<img src="data:image/jpeg;base64, LzlqLzRBQ..." />那样呈现图像

相关问题