Sample code for 30+ languages & platforms
Delphi DLL

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 DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MailMan, StringBuilder, Email;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
mailman: HCkMailMan;
email: HCkEmail;
sbCss: HCkStringBuilder;
bCrlf: Boolean;
filenameInHtml: PWideChar;
contentIdCss: PWideChar;
sbHtml: HCkStringBuilder;
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 := CkMailMan_Create();

// Use your SMTP server hostname.  This example uses office365, but it could be any SMTP server..
CkMailMan_putSmtpHost(mailman,'outlook.office365.com');
CkMailMan_putSmtpPort(mailman,587);
CkMailMan_putStartTLS(mailman,True);

// Set the SMTP login/password
CkMailMan_putSmtpUsername(mailman,'OFFICE365-SMTP-LOGIN');
CkMailMan_putSmtpPassword(mailman,'OFFICE365-SMTP-PASSWORD');

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

sbCss := CkStringBuilder_Create();
bCrlf := True;
CkStringBuilder_AppendLine(sbCss,'body {',bCrlf);
CkStringBuilder_AppendLine(sbCss,'    background-color: powderblue;',bCrlf);
CkStringBuilder_AppendLine(sbCss,'}',bCrlf);
CkStringBuilder_AppendLine(sbCss,'h1 {',bCrlf);
CkStringBuilder_AppendLine(sbCss,'    color: blue;',bCrlf);
CkStringBuilder_AppendLine(sbCss,'}',bCrlf);
CkStringBuilder_AppendLine(sbCss,'p {',bCrlf);
CkStringBuilder_AppendLine(sbCss,'    color: red;',bCrlf);
CkStringBuilder_AppendLine(sbCss,'}',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 := CkEmail__addRelatedString(email,filenameInHtml,CkStringBuilder__getAsString(sbCss),'utf-8');
if (CkEmail_getLastMethodSuccess(email) <> True) then
  begin
    Memo1.Lines.Add(CkEmail__lastErrorText(email));
    Exit;
  end;

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

numReplacements := CkStringBuilder_Replace(sbHtml,'CONTENT_ID_CSS',contentIdCss);

CkEmail_SetHtmlBody(email,CkStringBuilder__getAsString(sbHtml));

success := CkMailMan_SendEmail(mailman,email);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkMailMan__lastErrorText(mailman));
  end
else
  begin
    Memo1.Lines.Add('Mail Sent!');
  end;

CkMailMan_Dispose(mailman);
CkEmail_Dispose(email);
CkStringBuilder_Dispose(sbCss);
CkStringBuilder_Dispose(sbHtml);

end;