如何在 Delphi 中创建JPG文件的多部分/相关附件?

yptwkmov  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(99)

我正在尝试使用以下代码创建multipart/related附件:

var
 Msg: TIdMessage;
 Attachment: TIdAttachmentFile;
begin
 Msg := TIdMessage.Create(nil);
 try
  Attachment := TIdAttachmentFile.Create(Msg.MessageParts, 'D:\temp\CachedImage.jpg');
  Attachment.ContentType := 'multipart/related';
  Attachment.ContentTransfer := 'binary';
  Attachment.ContentDisposition := 'attachment; filename="CachedImage.jpg"';
  Msg.SaveToFile('d:\temp\MyFile.eml');
 finally
  Msg.Free;
 end;
end;

我期待它保存为EML文件的附件。但它没有。
只保存了部分标题,仅此而已:

MIME-Version: 1.0
Date: Sat, 25 Mar 2023 09:38:31 +0300
--
Content-Type: multipart/related;
    boundary="0dZDwVffh1i=_ZLFRXeMyvVY4y2H5QDJoX"

如何解决这样的问题?我使用 Delphi 10.4.2与安装的Indy版本.

6xfqseft

6xfqseft1#

您所展示的代码甚至都不正确。为什么要将一个JPG文件指定为multipart/related部分本身呢?
请阅读Indy网站上的HTML MessagesNew HTML Message Builder class,了解在TIdMessage中使用multipart/related的正确方法。您应该将JPG文件放在multipart/related部件的 * 内部 *,该部件还包含与JPG * 相关 * 的text/html部件(即,它引用JPG)。
例如:

var
  Msg: TIdMessage;
  HTML: TIdText;
  Attachment: TIdAttachmentFile;
begin
  Msg := TIdMessage.Create(nil);
  try
    Msg.ContentType := 'multipart/related; type="text/html"'; 
    HTML := TIdText.Create(Msg.MessageParts, nil);
    HTML.Body.Text := '<img src="cid:12345">';
    HTML.ContentType := 'text/html';
    Attachment := TIdAttachmentFile.Create(Msg.MessageParts, 'D:\temp\CachedImage.jpg');
    Attachment.ContentID := '12345'
    Attachment.ContentType := 'image/jpeg';
    Attachment.ContentTransfer := 'binary';
    Msg.SaveToFile('d:\temp\MyFile.eml');
  finally
    Msg.Free;
  end;
end;

或者

var
  Msg: TIdMessage;
begin
  Msg := TIdMessage.Create(nil);
  try
    Builder := TIdMessageBuilderHtml.Create;
    try
      Builder.Html.Text := '<img src="cid:12345">';
      Builder.HtmlFiles.Add('D:\temp\CachedImage.jpg', '12345');
      Builder.FillMessage(Msg);
    finally
      Builder.Free;
    end;
    Msg.SaveToFile('d:\temp\MyFile.eml');
  finally
    Msg.Free;
  end;
end;

相关问题