Sample code for 30+ languages & platforms
Delphi DLL

Forward an Email using CreateForward

See more Email Object Examples

Reads an email from an IMAP server, creates a forward version of the email using the CreateForward method, and sends the email to another recipient.

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, Imap, Email;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
imap: HCkImap;
numEmails: Integer;
email: HCkEmail;
eForward: HCkEmail;
sbHtmlBody: HCkStringBuilder;
sbPtBody: HCkStringBuilder;
mailman: HCkMailMan;

begin
success := False;

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

// Read the 1st (most recent) email in an Inbox.
imap := CkImap_Create();

// Connect to an IMAP server.
CkImap_putSsl(imap,True);
CkImap_putPort(imap,993);
success := CkImap_Connect(imap,'imap.example.com');
if (success = False) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

// Login
success := CkImap_Login(imap,'myLogin','myPassword');
if (success = False) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

// Select an IMAP mailbox
success := CkImap_SelectMailbox(imap,'Inbox');
if (success = False) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

numEmails := CkImap_getNumMessages(imap);

// Fetch the email at the last sequence number.
// (We are assuming the Inbox has at least 1 email)

email := CkEmail_Create();
success := CkImap_FetchEmail(imap,False,numEmails,False,email);
if (success = False) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

// Disconnect from the IMAP server.
CkImap_Disconnect(imap);

Memo1.Lines.Add(CkEmail__subject(email));

eForward := CkEmail_Create();
success := CkEmail_ToForward(email,eForward);
if (success = False) then
  begin
    Memo1.Lines.Add(CkEmail__lastErrorText(email));
    Exit;
  end;

// The eForward email has no To or CC recipients yet.
// Add one or more..
CkEmail_AddTo(eForward,'Joe','joe@example.com');

// We also need to specify the From name/address.
CkEmail_putFromAddress(eForward,'matt@someMailServer.com');
CkEmail_putFromName(eForward,'Matt');

// If we wish to add text at the start of the email body:
sbHtmlBody := CkStringBuilder_Create();
if (CkEmail_HasHtmlBody(eForward) = True) then
  begin
    CkStringBuilder_Append(sbHtmlBody,CkEmail__getHtmlBody(eForward));
    CkStringBuilder_Prepend(sbHtmlBody,'<p>Hello, this is an email I''m forwarding to you...</p>');
    CkEmail_SetHtmlBody(eForward,CkStringBuilder__getAsString(sbHtmlBody));
  end;
sbPtBody := CkStringBuilder_Create();
if (CkEmail_HasPlainTextBody(eForward) = True) then
  begin
    CkStringBuilder_Append(sbPtBody,CkEmail__getPlainTextBody(eForward));
    CkStringBuilder_Prepend(sbPtBody,'Hello, this is an email I''m forwarding to you...' + #13#10 + #13#10);
    CkEmail_SetTextBody(eForward,CkStringBuilder__getAsString(sbPtBody),'text/plain');
  end;

// We could save the .eml, then double-click on it to view in our mail program, such as Outlook or Thunderbird..
CkEmail_SaveEml(eForward,'qa_output/forward.eml');

// We could send (forward) the email..
mailman := CkMailMan_Create();

CkMailMan_putSmtpHost(mailman,'smtp.example.com');
CkMailMan_putSmtpUsername(mailman,'myLogin');
CkMailMan_putSmtpPassword(mailman,'myPassword');
CkMailMan_putSmtpPort(mailman,587);
CkMailMan_putStartTLS(mailman,True);

success := CkMailMan_SendEmail(mailman,eForward);
if (success = False) then
  begin
    Memo1.Lines.Add(CkMailMan__lastErrorText(mailman));
    Exit;
  end;

success := CkMailMan_CloseSmtpConnection(mailman);
if (success <> True) then
  begin
    Memo1.Lines.Add('Connection to SMTP server not closed cleanly.');
  end;

Memo1.Lines.Add('Mail Sent!');

CkImap_Dispose(imap);
CkEmail_Dispose(email);
CkEmail_Dispose(eForward);
CkStringBuilder_Dispose(sbHtmlBody);
CkStringBuilder_Dispose(sbPtBody);
CkMailMan_Dispose(mailman);

end;