Sending HTML emails with Indy

This example shows how to send HTML emails using Delphi and Indy, with embedded images.


uses
  idMessage;

procedure TForm1.Button1Click(Sender: TObject);
var
  html: TStrings;
  htmpart, txtpart: TIdText;
  bmppart: TIdAttachment;
  email: TIdMessage;
  filename: string;
begin
  filename := ExtractFilePath(Application.ExeName) + 'us.jpg';

  html := TStringList.Create();
  html.Add('<html>');
  html.Add('<head>');
  html.Add('</head>');
  html.Add('<body><h1>Hello</h1>');
  html.Add('<img src="cid:us.jpg" />');
  html.Add('This is a picture of us!</body>');
  html.Add('</html>');

  email := TIdMessage.Create(nil);
  email.From.Text := 'Pete@NooooSpammmm.Droopyeyes.com';

  email.Recipients.EMailAddresses := 'Pete@NoooSpammmm.droopyeyes.com';
  email.Subject := 'Hello';
  email.ContentType := 'multipart/mixed';
  email.Body.Assign(html);

  txtpart := TIdText.Create(email.MessageParts);
  txtpart.ContentType := 'text/plain';
  txtpart.Body.Text := '';

  htmpart := TIdText.Create(email.MessageParts, html);
  htmpart.ContentType := 'text/html';

  bmppart := TIdAttachment.Create(email.MessageParts, filename);
  bmppart.ContentType := 'image/jpeg';
  bmppart.FileIsTempFile := true;
  bmppart.ContentDisposition := 'inline';
  bmppart.ExtraHeaders.Values['content-id'] := 'us.jpg';
  bmppart.DisplayName := 'us.jpg';

  try
    idSMTP.Connect();
    try
      idSMTP.Send(email);
      ShowMessage('Sent');
    except
      on E: Exception do
        ShowMessage('Failed: ' + E.Message);
    end;
  finally
    idSMTP.Disconnect();
    email.Free();
    html.Free();
  end;
end;
 

 

Share this article!

Follow us!

Find more helpful articles:

Comments

Apr
9

This piece of code definitely saved my skin. Thanks a billion...... I'm a not aware HTML and it's tags...... this piece of code really really made my day.... Thanks once again

By Abhinandan Dass