Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Set the Certificate for Decrypting S/MIME Email

See more IMAP Examples

Demonstrates the Chilkat Imap.SetDecryptCert method, which specifies the certificate used to decrypt S/MIME messages downloaded by this Imap object. The only argument is a Cert that has access to its private key. This example loads the certificate from a PFX file.

Note: The certificate path is relative to the application's current working directory. Supply the path to your own certificate file.

Background: An S/MIME-encrypted message can only be read with the recipient's private key. Once a decrypt certificate is set, Chilkat decrypts matching messages automatically as they are fetched, so your code works with plaintext Email objects. Use SetDecryptCert2 instead when the certificate object does not itself carry the private key.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Imap,
  Chilkat.Cert;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  imap: TImap;
  pfxPassword: string;
  cert: TCert;

begin
  success := False;

  //  Demonstrates the Imap.SetDecryptCert method, which specifies the certificate used to decrypt
  //  S/MIME messages downloaded by this Imap object.  The only argument is a Cert that has access
  //  to its private key.

  imap := TImap.Create;

  imap.Ssl := True;
  imap.Port := 993;

  success := imap.Connect('imap.example.com');
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;
  success := imap.Login('user@example.com','myPassword');
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;

  //  The PFX password is not hard-coded in source.  Insert code here to obtain it from an
  //  interactive prompt, environment variable, or a secrets vault.

  //  Load a certificate (with private key) from a PFX file.
  cert := TCert.Create;
  success := cert.LoadPfxFile('qa_data/smime.pfx',pfxPassword);
  if (success = False) then
    begin
      WriteLn(cert.LastErrorText);
      Exit;
    end;

  //  Use it to automatically decrypt S/MIME messages that are subsequently downloaded.
  success := imap.SetDecryptCert(cert);
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;

  success := imap.Disconnect();
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;


  imap.Free;
  cert.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.