Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Add Image to HTML Email

See more Email Object Examples

Demonstrates how to add an image to an HTML email.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Email;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  email: TEmail;
  html: string;
  pathInHtml: string;
  pathOnDisk: string;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  email := TEmail.Create;

  email.From := 'Matt <matt@example.com>';
  email.AddTo('Joe','joe@example.com');
  email.Subject := 'This is a test';

  //  Add an HTML body with an image tag.
  html := '<html><body><p>Test with image:</p><p><img src="/wildlife/starfish.jpg" /></p></body></html>';
  email.SetHtmlBody(html);

  //  Add the image data from a file.  The pathInHtml must match the value of the img tag's src attribute.
  pathInHtml := '/wildlife/starfish.jpg';
  //  The actual path of the JPG file in the local filesystem:
  pathOnDisk := 'qa_data/jpg/starfish20.jpg';

  success := email.AddRelatedFile2(pathOnDisk,pathInHtml);
  if (success = False) then
    begin
      WriteLn(email.LastErrorText);
      Exit;
    end;

  //  The email is now properly constructed with an image that will be visible in the HTML.
  //  In this example, we'll save it to a .eml file and verify by loading the .eml in an email client such as Mozilla Thunderbird.

  success := email.SaveEml('qa_output/starfish.eml');

  //  Also, we can examine the MIME to understand how the image data in the MIME is associated with the img tag in the HTML.
  //  It is the Content-Location header value that must match the value of the img tag's src attribute.

  WriteLn(email.GetMime());

  //  Here's the MIME:

  //  MIME-Version: 1.0
  //  Date: Thu, 26 May 2022 11:09:12 -0500
  //  Message-ID: <B1D499F74F533E287BFE04BBD79AAF1D973B61E3@SLICE>
  //  Content-Type: multipart/related; boundary="------------000205040704010904010706"
  //  X-Priority: 3 (Normal)
  //  From: Matt <matt@example.com>
  //  To: Joe <joe@example.com>
  //  Subject: This is a test
  //  
  //  --------------000205040704010904010706
  //  Content-Type: text/html; charset=us-ascii
  //  Content-Transfer-Encoding: 7bit
  //  
  //  <html><body><p>Test with image:</p><p><img src="/wildlife/starfish.jpg" /></p></body></html>
  //  --------------000205040704010904010706
  //  Content-Type: image/jpeg; name="/wildlife/starfish.jpg"
  //  Content-Transfer-Encoding: base64
  //  Content-Disposition: inline; filename="/wildlife/starfish.jpg"
  //  Content-Location: /wildlife/starfish.jpg
  //  
  //  /9j/4AAQSkZJRgABAQEASABIAAD//gAmRmlsZSB3cml0dGVuIGJ5IEFkb2JlIFBob3Rvc2hvcD8g
  //  NC4w/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdf
  //  YmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj
  //  Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8IAEQgAFAAUAwERAAIRAQMRAf/EABcAAAMBAAAA
  //  AAAAAAAAAAAAAAIDBAX/xAAYAQADAQEAAAAAAAAAAAAAAAABAgMEAP/aAAwDAQACEAMQAAAB2kZY
  //  NNEijWKddfTmLgALWH//xAAbEAACAgMBAAAAAAAAAAAAAAABAgMRAAQSE//aAAgBAQABBQL0XqN+
  //  pM2aqJGMiqFFCyg7z//EABwRAAICAgMAAAAAAAAAAAAAAAERAAIQIQMSUf/aAAgBAwEBPwHqU5aq
  //  Axx+y1tMQl4elj//xAAcEQEAAQUBAQAAAAAAAAAAAAABEQACEBIhA1H/2gAIAQIBAT8B3Bhqy7Zc
  //  enyiwmGgDhiOzj//xAAdEAABAwUBAAAAAAAAAAAAAAABAAIREBIhIkFR/9oACAEBAAY/ArZyn+Cg
  //  xtxWuJaoCnqDuin/xAAcEAABBAMBAAAAAAAAAAAAAAABABEhYRAxQVH/2gAIAQEAAT8hkEwPUUR9
  //  DYfE4nxtRpIkBTsayuALIiuY/9oADAMBAAIAAwAAABDWPTsf/8QAGhEAAwADAQAAAAAAAAAAAAAA
  //  AAEREDFBIf/aAAgBAwEBPxC0DVPcWm+Ce4OesrkE6bjH/8QAGBEBAQEBAQAAAAAAAAAAAAAAAREA
  //  QRD/2gAIAQIBAT8QahMiOc8YgSrnTY3ELclHXn//xAAcEAEBAAIDAQEAAAAAAAAAAAABEQAhMUFx
  //  EFH/2gAIAQEAAT8Qn3igmSZSj+c4N4zapMy9IjFV98wncN2iuLFsCEbDGxQkI6RO/n//2Q==
  //  
  //  --------------000205040704010904010706--


  email.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.