Sample code for 30+ languages & platforms
Delphi ActiveX

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 Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
mailman: TChilkatMailMan;
email: TChilkatEmail;
sbCss: TChilkatStringBuilder;
bCrlf: Integer;
filenameInHtml: WideString;
contentIdCss: WideString;
sbHtml: TChilkatStringBuilder;
numReplacements: Integer;

begin
success := 0;

// 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 := TChilkatMailMan.Create(Self);

// 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 := 1;

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

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

sbCss := TChilkatStringBuilder.Create(Self);
bCrlf := 1;
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 <> 1) then
  begin
    Memo1.Lines.Add(email.LastErrorText);
    Exit;
  end;

// The src attribute for the image tag is set to the contentIdCss:
sbHtml := TChilkatStringBuilder.Create(Self);
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.ControlInterface);
if (success <> 1) then
  begin
    Memo1.Lines.Add(mailman.LastErrorText);
  end
else
  begin
    Memo1.Lines.Add('Mail Sent!');
  end;
end;