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

Send HTML Email with External CSS as Related Item

See more SMTP Examples

Demonstrates how to compose an HTML email with an external CSS file included as a related item and referenced by CID (Content-ID).

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.MailMan,
  Chilkat.StringBuilder,
  Chilkat.Email;

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

procedure RunDemo;
var
  success: Boolean;
  mailman: TMailMan;
  email: TEmail;
  sbCss: TStringBuilder;
  bCrlf: Boolean;
  filenameInHtml: string;
  contentIdCss: string;
  sbHtml: TStringBuilder;
  numReplacements: Integer;

begin
  success := False;

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

  //  The mailman object is used for sending and receiving email.
  mailman := TMailMan.Create;

  //  Use your SMTP server hostname.  This example uses office365, but it could be any SMTP server..
  mailman.SmtpHost := 'outlook.office365.com';
  mailman.SmtpPort := 587;
  mailman.StartTLS := True;

  //  Set the SMTP login/password
  mailman.SmtpUsername := 'OFFICE365-SMTP-LOGIN';
  mailman.SmtpPassword := 'OFFICE365-SMTP-PASSWORD';

  //  Create a new email object
  email := TEmail.Create;
  email.Subject := 'HTML Email with embedded CSS';
  email.From := 'Chilkat Support <my-office365-user@mydomain.com>';
  email.AddTo('Chilkat Support','support@chilkatsoft.com');

  sbCss := TStringBuilder.Create;
  bCrlf := True;
  sbCss.AppendLine('body {',bCrlf);
  sbCss.AppendLine('    background-color: powderblue;',bCrlf);
  sbCss.AppendLine('}',bCrlf);
  sbCss.AppendLine('h1 {',bCrlf);
  sbCss.AppendLine('    color: blue;',bCrlf);
  sbCss.AppendLine('}',bCrlf);
  sbCss.AppendLine('p {',bCrlf);
  sbCss.AppendLine('    color: red;',bCrlf);
  sbCss.AppendLine('}',bCrlf);

  //  It's possible to add a CSS file directly by calling AddRelatedFile.
  //  This example will add the CSS from a string.
  filenameInHtml := 'styles.css';
  contentIdCss := email.AddRelatedString(filenameInHtml,sbCss.GetAsString(),'utf-8');
  if (email.LastMethodSuccess <> True) then
    begin
      WriteLn(email.LastErrorText);
      Exit;
    end;

  //  The src attribute for the image tag is set to the contentIdCss:
  sbHtml := TStringBuilder.Create;
  sbHtml.AppendLine('<!DOCTYPE html>',bCrlf);
  sbHtml.AppendLine('<html>',bCrlf);
  sbHtml.AppendLine('<head>',bCrlf);
  sbHtml.AppendLine('  <link rel="stylesheet" href="cid:CONTENT_ID_CSS">',bCrlf);
  sbHtml.AppendLine('</head>',bCrlf);
  sbHtml.AppendLine('<body>',bCrlf);
  sbHtml.AppendLine('',bCrlf);
  sbHtml.AppendLine('<h1>This is a heading</h1>',bCrlf);
  sbHtml.AppendLine('<p>This is a paragraph.</p>',bCrlf);
  sbHtml.AppendLine('',bCrlf);
  sbHtml.AppendLine('</body>',bCrlf);
  sbHtml.AppendLine('</html>',bCrlf);

  numReplacements := sbHtml.Replace('CONTENT_ID_CSS',contentIdCss);

  email.SetHtmlBody(sbHtml.GetAsString());

  success := mailman.SendEmail(email);
  if (success <> True) then
    begin
      WriteLn(mailman.LastErrorText);
    end
  else
    begin
      WriteLn('Mail Sent!');
    end;


  mailman.Free;
  email.Free;
  sbCss.Free;
  sbHtml.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.