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

Add a Custom Header to a Related Item

See more Email Object Examples

Demonstrates the Chilkat Email.AddRelatedHeader method, which adds a custom MIME header field to an existing related item identified by its zero-based index. This example first adds a related style sheet (which becomes index 0) and captures its generated Content-ID, builds an HTML body that references the style sheet by that cid:, then attaches an extra header field to the related item and prints the resulting MIME.

Background: Like attachments, each related item (an inline image, style sheet, etc.) is a MIME part with its own small header block describing that part — Content-Type, Content-ID, Content-Location, and so on. AddRelatedHeader lets you insert additional fields into that per-part block, which is occasionally required for interoperability with clients that look for specific custom headers on embedded resources.

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

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

procedure RunDemo;
var
  email: TEmail;
  cid: string;
  sbHtml: TStringBuilder;
  numReplaced: Integer;

begin
  //  Demonstrates the AddRelatedHeader method, which adds a custom MIME header field to an
  //  existing related item, identified by its zero-based index.

  email := TEmail.Create;
  email.Subject := 'Related item with a custom header';

  //  Add a related item first (a style sheet); capture its generated Content-ID.  It becomes
  //  related-item index 0.
  cid := email.AddRelatedString('styles.css','body { color: black; }','utf-8');
  if (email.LastMethodSuccess = False) then
    begin
      WriteLn(email.LastErrorText);
      Exit;
    end;

  //  Build the HTML body, referencing the related style sheet by its Content-ID.  A
  //  placeholder is used and then replaced with the actual Content-ID.
  sbHtml := TStringBuilder.Create;
  sbHtml.Append('<html><head><link rel="stylesheet" href="cid:PLACEHOLDER_CID"/></head><body>Styled content.</body></html>');
  numReplaced := sbHtml.Replace('PLACEHOLDER_CID',cid);
  email.SetHtmlBody(sbHtml.GetAsString());

  //  Add a custom header field to the first related item (index 0).
  email.AddRelatedHeader(0,'X-Custom-Related-Header','some value');

  //  The custom header now appears in the related item's MIME part.
  WriteLn(email.GetMime());


  email.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.