Sample code for 30+ languages & platforms
Lazarus Pascal

Add Image to HTML Email

See more Email Object Examples

Demonstrates how to add an image to an HTML email.

Chilkat Lazarus Pascal Downloads

Lazarus Pascal
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.