Sample code for 30+ languages & platforms
Delphi DLL

Upload (Append) Email to an IMAP Mailbox and get the UID of the Appended Email

Upload / append an email to an IMAP mailbox and get the UID of the appended email.

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

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
imap: HCkImap;
cap: PWideChar;
email: HCkEmail;
uidNext: Integer;

begin
success := False;

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

imap := CkImap_Create();

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

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

// Check the capabilities of the IMAP server.
cap := CkImap__capability(imap);
Memo1.Lines.Add('IMAP capabilities: ' + cap);

// If the capabilities string contains the substring "UIDPLUS", then 
// the UID of the appended email will be available in the AppendUid property (see below).

// For example, the GMail IMAP server has these capabilities (at this current time)
// * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN 
// X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT 
// APPENDLIMIT=35882577 LIST-EXTENDED LIST-STATUS

email := CkEmail_Create();

// Load the email from a .eml file.
success := CkEmail_LoadEml(email,'myEmail.eml');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkEmail__lastErrorText(email));
    Exit;
  end;

success := CkImap_AppendMail(imap,'Inbox',email);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

// If the IMAP server supports the UIDPLUS extension, then the 
// imap.AppendUid will contain the UID of the appended email.
// Otherwise AppendUid will be 0.
Memo1.Lines.Add('UID of appended email: ' + IntToStr(CkImap_getAppendUid(imap)));

// If the IMAP server does NOT have UIDPLUS, then a program can 
// first select the mailbox, get the value of the UidNext property,
// and then append.  The appended email SHOULD have a UID equal to 
// the UidNext that was obtained just prior to appending (assuming no other
// program is simultaneously appending an email to the same mailbox).

// Note: It is not required to select a mailbox to append.  The select is only
// done for the purpose of obtaining the UIDNEXT value.
success := CkImap_SelectMailbox(imap,'Inbox');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

uidNext := CkImap_getUidNext(imap);

success := CkImap_AppendMail(imap,'Inbox',email);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkImap__lastErrorText(imap));
    Exit;
  end;

Memo1.Lines.Add('The UID of the appended email SHOULD be ' + IntToStr(uidNext));

Memo1.Lines.Add('Email uploaded to Inbox!');

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

CkImap_Dispose(imap);
CkEmail_Dispose(email);

end;