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

Decrypt Email using RSAES-OAEP with AES-128 CBC and SHA256

See more Email Object Examples

Demonstrates how to decrypt an email that was encrypted using RSAES-OAEP with SHA256 and AES-128 content encryption.

Note: This example requires Chilkat v9.5.0.67 or greater.

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.Email;

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

procedure RunDemo;
var
  success: Boolean;
  email: TEmail;

begin
  success := False;

  email := TEmail.Create;

  //  To decrypt an email, we must provide the certificate + private key
  //  that matches the cert + public key that was used to encrypt.
  //  This can be done by adding PFX sources.
  //  (On a Windows system, if the cert+private key was installed on the system,
  //  then Chilkat should automatically find the matching cert+key and use it to decrypt.)

  success := email.AddPfxSourceFile('qa_data/rsaes-oaep/cert_plus_privatekey.pfx','PFX_PASSWORD');
  if (success <> True) then
    begin
      WriteLn(email.LastErrorText);
      Exit;
    end;

  //  Email objects automatically decrypt when loaded from a file, or when loaded from MIME (which
  //  includes when being downloaded from a mail server).
  success := email.LoadEml('qa_data/rsaes-oaep/rsaes-oaep-encrypted.eml');
  if (success <> True) then
    begin
      WriteLn(email.LastErrorText);
      Exit;
    end;

  //  Note: It is not necessary to know in advance the algorithms needed to decrypt.
  //  The information about the RSA algorithm (OAEP vs PKCS-v1_5), the OAEP hash algorithm,
  //  and the content encryption algorithm (such as AES-128), are all contained within
  //  the PKCS7 ASN.1 structures and any decryptor would read these to know what to do.

  //  We can check to see if the email was actually encrypted, and if so, whether it
  //  was successfully decrypted:
  if (email.ReceivedEncrypted = True) then
    begin
      WriteLn('This email was encrypted.');
    end
  else
    begin
      WriteLn('This email was not actually encrypted.');
      Exit;
    end;

  //  Now check to see if it was successfully decrypted.
  if (email.Decrypted <> True) then
    begin
      WriteLn('Unable to decrypt this email.');
      Exit;
    end;

  //  Save the decrypted .eml
  success := email.SaveEml('qa_output/decrypted.eml');

  //  OK.. getting here means the email was decrypted.
  WriteLn('The email was successfully decrypted.');

  //  The MIME of an encrypted email looks like this:

  //  MIME-Version: 1.0
  //  Date: Tue, 18 Apr 2017 10:12:16 -0500
  //  Message-ID: <7ED75DF554717DC7994D7EB757E30709E8733C5C@CHILKAT13>
  //  Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
  //  X-Priority: 3 (Normal)
  //  Subject: This is a sample email
  //  To: "Chilkat Support" <support@chilkatsoft.com>
  //  From: "Chilkat GMail" <chilkat.support@gmail.com>
  //  Content-Disposition: attachment; filename="smime.p7m"
  //  Content-Transfer-Encoding: base64
  //  
  //  MIIorAYJKoZIhvcNAQcDoIIonTCCKJkCAQAxggGgMIIBnAIBADB1MGgxCzAJBgNVBAYTAlVTMQsw
  //  CQYDVQQIDAJJTDEQMA4GA1UEBwwHV2hlYXRvbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
  //  dHkgTHRkMRcwFQYDVQQDDA5DaGlsa2F0V2lkZ2V0cwIJAMRwugDmvniwMBwGCSqGSIb3DQEBBzAP
  //  oA0wCwYJYIZIAWUDBAIBBIIBAIJY4pN5LdVt8UiwC7sHnzEu15pJmDyiHLL+E024quIP+wU6k/WM
  //  9hkNKDuUa5lyz4IqI4/KWlqFbCf43/TllsGHjEnKyWvcmdJxfcf1BU3+nj6t9LFRPYWeMkZHoa0g
  //  E21VzlZQgq/OV/1bG6hzpqtyQyQC3kAszR6GzEz89BJHjRIUv5rpgPwvEhdvG6i8nyChsCfK/ZYw
  //  VCv/HbBQrYXnJemiE4OOBy8nea0dMTzjQH2eqGplNh5gq21/FgUKTfNX+vqyPFaGZ9jjqdOGuewx
  //  E58ln/3NlfOWnL61evVFXD99XQEPzK6FPep4b4sC4gQKwH+tudYTNFn8xskN5t4wgibuBgkqhkiG
  //  9w0BBwEwHQYJYIZIAWUDBAECBBBd6O3DQBKr4muGqiYIMHaWgIImwNU9MZGkfh0KoIlYodHUi6Mb
  //  Hic8dFqXkKSbfZi9+ofsSaQm8xoytO/uXbpSkdyw8kMruS64IxvuCcIa2kebUhb2nURT9vs7zaqy
  //  nDliAkEyZuMdZuzqGlPqbCCrXvXqAeUpBUz2k/r7bdgQVgBFEhsIOrB7acCgLPdJi0b8qozR8CGd
  //  lvUxX3ir+dAJiSqUlyE3lSE4ldk9Z5u3nhEGAaVAFdj/aOeHyqtz5KwObbuNBBresbBovi/H/XDQ
  //  xStJkMkW7luijk1jPaMoupnMI6gfDW6axyperKOIPveyXX2b5JkyFJWpg9pbvp8WFpPTsPjUqZrb
  //  VUNNh3+JEjhkUkOpWLOxQ0+qnvwJtfUg7tH6CM2mSUV1AaBAkTrK8micVqNwoSaUjSiEvvaWTFi1
  //  mjAhXgcRowuP1hHjEbm7Ia+h7k9eJCDeCYvIVWCsOFSREkgujQphMRRDwUzFq3aT6dUXDhMJyouq
  //  zOVttHBFFWcgzcExTQccIfDLB85GN3YXPRf/dWv3t4iY8KbVj1hI12WkDjK80dHNY1+6UfixFPMN
  //  P2L0Ojh+TlRxoJF7D1jdIklkP1lByAqIOptyJqyQ19W2GzXUlqbTt9wbJpTvtdyKQrrsyDT0nYWs
  //  R9P50zcxtvxx8mYQP7fExEf1fZYpUreGfjMQ/+vorHNTAvvq0MIpnzsAzm8nkjY+wdyPdbOC94Wa
  //  MuimOUOkWXg5Pr0MS5nnwejns2G4hYHkZJgIoTU7drsfYpQn8eHxaJcWK2c/l662bUJKyxT7lQjZ
  //  7I+iWYkKB/NvrQQLaQO82QqZml+bR6K9bfRIEz1wtozEj5X9YG3DxNtR1pO2NGOZC0Sp4eegVFkO
  //  IQojbCRrnmPQ6lAY7e8zLIR9amsHQ7aNyuo5L+mSzJZ1SaA9NMIoKSwT/Z3GvYQHNwpsU3rsN00v
  //  MUumlLWCJkK5mTuFsfekmHhD9yuAsMviqAabwgay6BjjJdRA6cbQhv9N+OS+e1XnLOCDhgeKzSCj
  //  i30QTzV1e3mXN5uop/kJDCToacMymWpFbKZDZXFkLWFbqIz5dK84Be28uUAOYVanWHeBeddWNhfC
  //  knUcRZri6Q7zExGyMzCRv+MB4DtY7gBGQAPvVm6SOJDzWSSmH4yv+DK9xycL3MouQyj5O7TOHKCS
  //  5/DmJy2ucNCM/fKri6sW7LrbljL+Y1t5lkF7brL7t8GZ93pi4zc1TdlTwqEf6xgn3I9vu/vkPx+h
  //  mf/10k9iiRtorUx/b870Myoisf/fu0CQbMQF9ar4E1wcNvgyYw6L/61U8def2BUPkzy2KqzeY2zV
  //  E+iZwlarEfcgY8BUIt/rsT8cbXu2hPWsZ/wqBOxdersIQiSEs4bn4bkB2YAUQ7AtIrJCQtcn+pXG
  //  BIZyzUYw+nuICcroMQEZiIJ5QzQX+ScRkIrk2vCBoTqVwfu0fh8Q0e9dNJug5LIMurddR5NrZGbB
  //  dpa+RrRZqWRXHXjCLDm5CGLWZN2C5gJhnWgPtgGgBe2sAaAFJIyImmhe9aIo2Xbf/ZiwDX+HBcMk
  //  fnPDsVcyNjP2OaiogLWWMdZK25HQOhMl+tC97iDPJezhtq49iQYaNykD0XHWQ+ER2RHzomLBW6Nl
  //  dGH/rtLEN1aEj6MJBA2AtivXp9SLvvsdKonOoOiCIi+HfUvPnK6drmlrz5BDeDPNHYOQZaQIXI6x
  //  ogTozqRUvJnuozJ0eHdvQGJYA/WoI7XCWZVoSvtkaveFJch9+V++JOCt6XAZ7Y2c9RlOZI+USc7n
  //  68V3aHCAKBQHWcX67+w/LWbJHxfzYxE4LaAX6MHDVy+GjKWk+GajJlwzgnyDCyG7XNcY4HQ/gZpM
  //  HINz4THt1AqqHGKNevSTnQcQs/6K4r+/QSbDFhxKugmKtI1aZLTOMVd6I7qEYdxlKliK5fKaCVM1
  //  OLyBZZnVYVH5owJjd2/bppHtxxQfOJ5TIQBU8ecffSEy44FBaCooJSxVScRljtsl+pwQri87eU2U
  //  Lme5FbRNOu0qtrm5f/H5fQOF6W4n17sCUuJm87yXEa6sU5M+nsuQfw8Tc6mma3Lc6iUJYPhUFvn7
  //  pOC75VOAS0ehJv39AVQiwBPFITEPl1klDS5811wLtqT9tCVspkbbjEHgdUWJX/a1l8eWFYGKn2LQ
  //  txPEo/LBduvXJp2kMIDQlEM8FodH2RFuqv8T4COvddBIh9GE0LIKHD5YgT+XhZAKF/Ofp4n1enBJ
  //  8fJCNdYoQcp1uPirTs+F74U5C+I4FHZ6J8EW3pKaaXD2Iy+c3V9kAN17WTgp1vdmfUKq8CsH7vQu
  //  a/v4bIeVSRWT8VvQehSY9FLsfNdKKW4hLcjIZj+JjCkL5kniyKVQ2qkgWVjKSu0nkpGnJ7x2ty/x
  //  7hl8CvJ7nx27KGYc1CVNFzXXhYw0OOPoD8UwfcDFaZ/6MsWGozu//mihrA0x7QUmG79DhoR6XBnt
  //  3hVucMHorxeYuRHJXv6ulRxiODdJn/hcaIVd/t1waDeeEkWvrG80ghtKLP4YbLKtW5y+rJ4ryzx+
  //  LkWKG9a50p4cFdlkkxt2axaV6cyNjkKoHJOIQPvUX7Vt+sJyiYh84wYF+C3U5x94ebCLJfKpOJ//
  //  gSA3JY0wayiWMAcYlWZpV+5zngUatynCqa8RT/x0FG5nevsLiodCEHO9aiOcpYGtv0pR7wr1caME
  //  iIHQKZPwQmMMpfxy0LZStrA1zIFIkY0x/+kZJsIO4FBBZgiZf5ib5Ml0C2FGkhums2oufrzl1MjL
  //  2pLz5w5vU4Hoq2AhJSplTF+GeHGbZC78FTtwNLlrgUrmBnudC4Ma5qJj8nTLsXcDzK5c3Y06Aya4
  //  BQwVum/TfPjAMhwvKzMACreWqq3C4d91HmIjsKtBfTyOMyfxA2bJB88wvH5Cxe7r7Ccp7TxztC2H
  //  DyNqC1yr/q4GzdGwCZXjo3hC9zdjNNUcIfhUsujaux8ygXZYja86BR4luQeiqHI44BYoI85GTdd+
  //  V5K2dDnvvcaIo6DGVgqTlT3wMwmzNbdozXec2ZzVkTJMQvFJws7FIG7gXS3ztoi2LG1y8GKFZZoQ
  //  VkCu5uffPSIpgJx9nXzH9NdW/HAtXsvmhy3CRxFgqblYSVlclJH9pzPlI+S7pVIwB4poleTOrXnD
  //  6jyqoKbjJqTRZsR7zp9Bb3A04Knfw5+pOc4LwLf11WAYRRdUmQ3on3h7HXNXKw5yaC6DoIt+EgnN
  //  3RRcL+WEzcQEa98dQDaGN7e1YtLP/bw+fYFoLmn2QCVAf4BdjRPpw0jnOgFhkVM4ywlGsodg5sqf
  //  A+FJivC/HhGWwVDPuRNW0P/3kMXojrExlmJpYGZRY3w6h9ImO/F7TjV0ueljqqK+8QvS1RuMtANR
  //  jPyXWCQ19V8W2bRObeuR6TA8dEm1p+MeJahDBin9YieH1ivvaKKOOVkY9Tq00YW8ryCmJ+BX76eQ
  //  Yo6nJQZdcvu+m4+5TBFNwb8BYKNbPtouBui3wCJlxtEBCwp5XiZkWxErR+NYnyFRPlpG3pn/OUjn
  //  Jwaf5j1oxQxcVNa7mMD/cVcFzrIWSvioxY08LXWPItGarBaGrX/5RhiuWNcHiO2yv/Xfm3vN30KG
  //  SF/stTW8YgnzeAOXcWdwnZTxim/lq0GxoRJtIKgdeLhcDjQli6bIUTKw6d6vBn6ldytXKAtAmf2S
  //  si9fmkj/69r1+KajpkZZsxI0Ul5BU4LXFqj5L/vUELvQ3BCPR3pUQNve0RZiwQBCeEojkdjckDU2
  //  rHDFWlic/nBY/EtUArsY2TtxcuwynIXztr4jAM9efy6oQ7RW/jzoYgGXlStypxPjpB6CdB7VVOgZ
  //  3so7EOB+SQjzYk/KuC7pxbq47o+jm2rbFNrwa7wRfifdwRjfvtgXoYPJ3dF6bQHfWMNhz+g+Xmhw
  //  vwgNmPAXCRPzopqZDz1aIWc2O607vqmfAnJ+u4BLKLY1lf3bIzsKaN2e1SckfcSAAg9k7gOOJHW5
  //  Lds62NL5mqYpkrbHKBRXKoayl33jOa3a8Rd5GScA6MdrDzwQ07c12SqLBGeK1VfaR9C4n+aNVI+9
  //  asnmigzP1L7I+KGMIHnQHDVbSDPCic62YsYW3CwDfqgJgH9/VuNuUpIhqxnvDrf8/0O4q+H2J2pl
  //  4IkoiKy1x6T8Br90tIbyzQdfoIUx5HLJrXBcUGZb/LHCS+n2GejEYXdXNoePGra6AXUWE99rku37
  //  g0vyC0ehvp/0knd7x/hGvluKaDAoiVtNegRqSCOtvRfG0MycMje3kGn/ShWKPBYYE0srAn8C26Zp
  //  hRp7+IQjsO+1rh6pA6jWpOaoYOXWA8ATH9ERODHV2VXJvtlH4fChi/svS5neoXHaDVpt5DdeGYqL
  //  4ACl6WHWv8O337aAY7nhIv/uZWoyG6BQ6jJWW7vQKeUp6WJDXD4NSx/sjcRJs9WPXzFRaVygQ7No
  //  UPqZz69W6ADRwooRi1lwcQ224Z1eo+mreGzFSAFY1aBht6YC2nLLNAh73YvhSM6+Wyx2SMK/xHBP
  //  4Rq5Bs4o3miVvQXMLFE0xODFSetapUo8wEFP5coIEBOKP+KdCcsgf9zHeA2ShGnTy6xpiDFF1KiI
  //  hAVBpLt1kNJRR3NqjftB781iAsI3e5+x/gjUrn5OqsIEGRdnC669rW0INmKlTNUSoONUgzbEMe/+
  //  hI1iA6VWD/1t3W4UE38Tw101e7zbp99tZA2Z0echWWH4Db/3G05IbMAWyrbZruACU3WkGsa+7sYP
  //  2J7ncs4QFJ2AlW2K3OXORPLpg8MKuPhl1nnayngpDekzg/Xp1cz85UGdt/YnkodaNZZB3zKDaWyX
  //  YIOyC3SNVrK5O0VGmegDtnwhXWSKu+RKGs6AjtbdY7sM+U9B350We0A5IGcuv/n5B/YpYpz83qrE
  //  5hTOBTts1CpIjOnPvjlODD2eT2kp2iebQchpgceqLD7veOvxEhv7Xu7uYNtCnOpAG8TWfjgTsivy
  //  GZf5lFWNkSXF6qGG2GO200dueBC4X2Z38yy1OD+3yx12JxiPINEcIv3xtzDX+u4RlafY5ibunZxu
  //  T/Kuo+dF95slIARTauoolQ2+fcTPavJuSw+lkP17LzhvwJysVGKaQ4BlaM0dRerGc/2ya+K9NVwQ
  //  O5euqPaChoXjT/0Gd/IndxPQNU6UxlICIL3KGGMXIYNwII9KwJYbHBuCF3KuNjeBvTNbx8l4QSkk
  //  fVcePGcnMta2nGvQWKhRtumZDDnpUTYYhqz1uStWJ07P6btLdxAIvWumptpPHq1EbnWS2TXRszbC
  //  CeYkfMfYQunhZ4wZN3hI0gewiePIXM5uTlQEvlQTZ28yS8FTHXWuDmh/1HMRuYlQoF0Pnv1XX0GH
  //  MRw9O6ntkUrIy1R6TMtmqmORmo3YHy1e7N0LFmC8e59HbS+mvEBl8wYubmqN+hVXWC9hEZM6Bj14
  //  tA4k0lOlKz3Aw2ZP1KPNKoAPJr7FdZzYK2KXTQ609eY8c6naYcsVy+Glgh/P6ScsWqxnv2iDqtSh
  //  fqQ7Ug8iKE4bwqTEKT3iV5AOqLDFmZffdw3qy7DpH0/hDhYt6eEbAKuHLUT652lGNaUuuSz91XQj
  //  rr/DUoEiB+B48x5Xdfu9KVHP00KoPXnaXOJOXzdFnGqQIP78SDJbIl2RqeUDMrOTZvvXTBUsmpox
  //  e8pg84R4OY2C7Q1wTqIHOOB0G3N4vUFuaL70WZShzxflsCCXdvTbuDQLEJjxhaYm9HkyncST7oAZ
  //  gU2OXZ38c0tONe74npOaJdzMxfcmqH/IprhoqpWfpUdIDZVvcAkTlRa30sdm0gmlG/xCS7N1CIez
  //  apyrmv7FW267iEONGbgm4fd7aaWNENPW+yXRty5qw/IoEjLV/yxGQtw9Y1ioCxn4DtKb7DmWfsQL
  //  qpZvJNzno/fPF1QKRkUFOFFXVGmC1btSgL+ww/99KTmadkFm48QInztBPMj/a/PuM88LO4GYohyq
  //  QBx3wFjP/5ZHx3h0ddWz2S00qUzKlW9j3XVjOhVR/jGtXMYqnWnY/3AHGj1vmMiB212UhDg1Iww+
  //  Hba/H7GcoNk6MoglaohYjx4kQnrMg37zQKwQ5i61hoT5MpX717Xx+KMLsbjUtdEIg+KlkRCdNnDC
  //  Y6eywWkNBh6cAeN6Phos7j+Xv+Y0yMlqhrD7RuziItEoMTPkWTpBfiUI/58cMycuuLYfz+V0RTMr
  //  jHKFiipwi6RD0GjZwzfotGcset7RytLggAnxtE7c/mnNpkEp5zSp5qPIq+KQqSbeAkdN4SHMSm06
  //  dHFiE5QptOB1dZ2F7RebTHwWjB5gNRpeYrWfw0cQiSz7N3lcdP/iyoxYnj6V0O8+0VU/GlmrWG36
  //  WtkMEcSUDNU0BCbRY1x5URDEjRR7OB0hgnaWcSB6n+Wk7sXMdQ4DJdZHGsRlP2P3PVbsPzIjNrLG
  //  6DCC8EQ6ivtqvhHJy67a2hhL7fgsVBHitly+3U8hH7mJEAAMY6l0lO9OnecKozOv1G0uvwu7WcrF
  //  hS+qXvMIBEgo6XkNt8lsyvSbBkG05mVEw5fy5HjCqLi7US1jqwe1jtNf/WqtXqzGfRwTfmijEyGf
  //  D4RCL2fXaeXIJcGD4T0El+6LmkUoAo7p2DEHHYgazMhFY/kuQTw71ZDFiPCZ9qIqg/5jWJio2Sf3
  //  5HvQLDRB8lbIGEY4CkP6bZI+5nJK8VQ+Vxwp2YnwxOnP+YaCXmUWLQVn/xNTjFmE42mFkhXoySCR
  //  l1vBbTfvm+gpsJIuG8iUCKKAQEcU5jegLnBYzNOrtANNwAyTjvI0ZDnBCWASyfYB2/AMzb5PLD/K
  //  QwQp+IlRnzQZwVT+6W2HK7VWivyuoR9y/XqWWTE8RfY5xaZ451jHWURmbVAIXOuD34jkJUKK2Xv1
  //  AoqWag3aQAqUU2HeBnC5CCTKza9WoCTPdu8BcxD9DYQEIxerIKzXyJe8G0Cd3UNI9OfAIdhcvpkw
  //  IArWfur9p3vQmH5+1VFHFGLOjVk+wzlwpPNta5DE5DLa2XPuifboxB6OEFSfDzbTy2hYfszZXBh4
  //  81zsmiiOp52hLCvzF+mebR46QmCqBDD953V6XcCkL2pEF8yUzz+Rn6mWNf7sp90SoeWnh9d5ynyX
  //  rq86PLQWQYLgGMNSPHerD8k0ZtcXDNZudYfbr2c6/au+lw9a/ANetSrvXD5mrgMTjxusi0vSidd4
  //  4c4g2ntJY4AZu/+/F1sZukGt500+WYrusjCLYqhSFUGjur0918FItIpHHGok7nyD9S7L8NWC3mo7
  //  DLLruEHoZEXJ0zsf1oKb0zaQ3Ca4tMZ3mN6re9/+eSeMgGeQuda4h4z2bA5m7KqkIIhejJyytKRI
  //  Q6DlXZsNsnENsZ2vvFBtHQAodreCOObKkWdYidFma93W0BorGOJInqVH7qg12DfC3kesMMPeL+nU
  //  TkSC5eSiAwGsFt6ar+/T0Z249erCs/11jHTPDIGc4VGtN1zy148KwrzsHee2XyE1racuVXjbNpuM
  //  V8O5E11kggown7GXbpyuZYLj7zqh78XoIJsDMvck5Cr9PSE25cbOthBBzqzF6N/eqsuIYvKShtt4
  //  YiVQd+niHTal15tzKq2gyD1ua9BFO6xOXFhzK3U4RSJzL9j3U+kgKJU1uW+sEgWn6OOBIJkFOKX4
  //  l4XHYoayq/9cOgWHVZEywhHm+p7k1A1nmybzAosq4NCiwGV8d/Y75YgXSPvy7ES54NSrJ1QZyWe2
  //  oYEO054EA9QZD8FiyYCggQvTujuelXlTqWul9tL36mJTqaTsyfz5rkCZ1YjHnMRYyz6kyi5BPRKl
  //  vFOQeAVaz1n+JEtmIiBwwWunvwGl1qhQYPc9SBKjPiASPZsSCVY4H3NSL6CssRhUpKpDxng2CGRW
  //  zXl8xxI9+Nya7k895qHishUTGqfz3OlkE4Jpr2wx3vjsTKP8+Fxh7RFv77XMLqaAnE0q5JBM++bi
  //  uEDtLg2yjq5AB3VtYmwZTHV5CCJbk1VV4vjGwDljEoWh4uaKQzZvZ9u5IhqL/OSXYhwGVNE+WmgC
  //  04r/7myL8eOZwHiG4Lbh7yiaXru3y7/df2c8WrJrLX+2y5Y0UGRV9nhMKU+d4dE+EmPAWs7MY0r2
  //  QxXSXFwcBinwobZSTsxTZg1/bsH4nFSK1EJ570ywBBKSZfjtKEOUUH+7/o5/6rf5XBLO67V+6PWE
  //  XrUhfOHTKBEV6vQSNADwP1Nrh5z4XK9PgaeP7LF9MA5idX0B54CNpZwqkXITTgfrp72+HQQ+vHqP
  //  GZ0RcYD0TmmWr9/UY2/3yInoG4qcIKit3muIIPx77YFmta2qWhlZn7SYN8lbnEHLmcUHgcKqhcf/
  //  Lvo3nqP4iF81aJ2ZivQ5sRFwwrw5EuUotcjCOVL3lH0He4v93cRNYMoi3PA9WT2h1iMEPZc68n6A
  //  StidspXIP0mGECWwYFirchvZox8hMunf/qLqHADXoIlSqrtbI6KlEWgD31OXzuDCqxZrFMQwh4np
  //  yYieBl94Uwxa/9jqpzbKSHx53EWQrQIMxUfTahmfWm8uUVU5xnlw3hW1M77KzqQOUfhjOsUSz+XD
  //  k2OlZXPhyWpWJ2/3vtzi3y/xO4nAcOL8XhUCf2e1bTATSyJf+L5znGe6tdp0jZeKFYxFvYIjePwC
  //  iEiFErkDfXt6jN8K8dNk5XMhn53ZW717dF2KZ0/gZJ6PMfAd+x4epFTb5Jb0uRIINvoJQt7LKq4L
  //  r+eMF6Uv4n0I3DJ6sE9X3I6r33J/W2hy6csbb0hvo6J7j77LwU7Mqc5RPrw0dMFXwWR5OSE+IGkh
  //  VgiPpTet15Am5vkSiCDHo0reSQmPKM3XU/UKksU3DFqpmpKfWxZUvrLfywLqtgOhvbepPf+/wZAf
  //  hY53LKhQEuGavkRnfImcFl3AXayA4HUzJbdz30DWqJnUvsMyzhK/2UzQaA2inLoclB72v8XcwdJn
  //  dsDVPHLlhu/x25y5eEWei6O14fq8lS2ZbkVL2fg3ciXBsiRUazHyK3x9c4Rtwzg0zhUab4Rm2OKW
  //  q1rR+Aw2EXbyWCy3eNj7gJMTtdIRru+x331pv/XCW57VMAOm7Dxx9RgBTk8mHfAjH+/LSBJ7dOBr
  //  FIMAkLY1pFP9Iqg1KR/5+o0mozX9G7SzoRrTu2n2w54HmbLqNuZBjg3B5dentxu6POt+F2UDqBWb
  //  begcUqF3kqyZXWa+/TgSvUq/CN6n1MWskMDjOBT7mHeyGRW3P0MNmtU3kjyo/sgJZdCHoYOEPBp3
  //  fi696PvuMIuwTouBUttOL8sd4M+H/bRGBY1StNdYaGoJSk+3cJK0FNaGMp+JvwxLTsXryJCHJJjW
  //  EXhLoXXGLIxEsDVCM5uPTPK4Lzolm3k+gNP0RlRO1dnQu2bsURvuwQwYXQYwdP64+RNqeNvnXfS0
  //  2OsTg/xKpm9J5IHP8WwwoWHsOCV4vgIE8vMdolTNn7KOvwbkU+4eHh3c21UsMDFPRvTH+EsTmoCm
  //  /LiB2nllxJnZuRcbX5PrdV+KjJGNZvuMZyZTB7x7Ns2EeSRuy5bG2czaBgT1tera9TmxekJyiD5f
  //  iYllwI8RBi36VFZdn5pA6i/gpwq94Sr7iv1nTGCdUcqNMUG5DYmesJw2VEx4mmmW10i8HJB+3KVz
  //  DK7NybiCR2vfKBr8HTlHQSMydFOuEjznZ58VZ3ApequE+ThYlfdWsbMMN08NmRr9NDu49nkGRNie
  //  j02PCFbjd6JfM81UuQ+xZo3HZ/aY/AmDyzT3X8H8vbtzN9nx3/x/uggtp2MXdPCskODaa6nPM0h3
  //  lucd1Yn492dybFv6JX4L9G/2wZqSWIucPLqbhVv1nLmOhrsmnyRbpkc6Mn+rtdQMj66yVGDGl+ob
  //  MmgbFx2rrCP5E9CyMfwO/RiAbSU31S44fW1DtZ+taWzZYGgHeDSNWGK4SpF2P2PucPeulPCgkLZA
  //  QJ3tx7xIsxhPSsEfzQNuvya+4KHa1TRqq7zS1gxYvJFquIwYgXo+tNvQmCVFXE1E7p9r4aq4Sz1h
  //  YH8bj3tplxP6oYAp44+i7a921RIfmChZrTzsvTaNQtW05pkJX7eHRZ9Dw0yfFjXU6kkjS5FZ8hvh
  //  yMcND7SBXf+WCbuUId/tZa0skq7KDmvFWnyJbXoacjMpFzSe6Ot1VDl2z+DRwUUKldOlUDEHf/uP
  //  xLarF/4g6/1i05UBSVnCbDVB391mBcaLaOYaMNhwdr4i0sYO5F1h7Xt7SlxUTp7B1o7X25AJWGMg
  //  lYEdO7HWuhRfrybjPWO4CdkMRt+NeXilsqA4KiYTCs6MW6GItilAEXX4tC3bcfwvezQijvSWkXnv
  //  5ww8/ZzDJCCol6qjgpReE/Vp33dNo54QeQqa225HTqpuN1Dj59bCmyrVZ/lkZ1OkD+aCiChfn/Cp
  //  TCq4LNk0lY8a5IES6iZBvpPcNp6AX9MY74XdkGDK8t7cABPN/8IGRynUvP/Q3nksdH3zNXgP/E2o
  //  M8MfBKM5/rtpMPfuWlrE+wxzzrPMcTkZhyxtDd/Ersm/F12E8r3DolxH6LqidfDaMCApUED//NfV
  //  fE7Lp9vj3+Ut8/1WhTRVw49nVIQiWX0fOJJUfoR07Euue2MnrBIAItKkRWskv+fucGTWmZkLd/dJ
  //  ruxXyZJa7lSyduzIhyqUfZi7PnWlsgc1qR9sI3E0CUlQnNu/bY10+ia9bqFk58uSVzZDZDYIjOq9
  //  ioEoiX2OA0oU7xKeVYBBOyron2Lh/TryiXlhSfXHMalgxvKja4O3rC/YVaJ9spsTdp+bm3TYBZIv
  //  Ee6X4L2WlcVEXIgQ1sFjQyd1mGAVGd78zpFLN0dOQSn324qruPmgoM+RFd7xGJmcDJAx9Adh/XXz
  //  N4DsutYxck/O9me3JhZl8frktps4BofJv/gqszyw14u2HCdIM24vFqh/cue3Q3h+3AT0wMksb4aM
  //  ucsA+pVOdP5D7oyNr0YsiKFbw4yK3L4KNyXanMV5VecXCaE729+ikHDP/XGf6sH2Ez0A2eWc1Fnq
  //  1nUvZA2yxtkwJdE7HMZAF2KVTBOPBtAP6wKuM33T6rB9zgkaWE9Q95FmUJFmp2V3iZC9jURkQNbc
  //  JwhUIkHe2uME50eVRaK/80qvalQbtvX8IoRQr22lm+YRhJNeTDCtByNkTXXoFDmd36yzXoGRDNjR
  //  DOikel3MvdNYMwtg2fwpww4eS8qxJ6+yiwh6RFoYS2uctbjORwMwUUil9FPXH+69qUIZyhAYkLKM
  //  1QvfbGIHb4xm2+hn3GOybrKH9kZ73yopDoVJGvKVqLip/EYizabfPNtlZEwIX+ReswUlytCJdzAK
  //  vlKpNUsKLKGqZdhHQzZzJmR+fFWgvAWxBGwg5ihUlXeOwgaOjfYhh3GQ3b3S1i4+3xFuqR1/BsAw
  //  J47AWFkNVW13yuDaqRG9AZ+XJJuRHIlKcEWU2FMqx/TCs+EytU6ZT8kgHAbju6EgaHs/NUptBLNM
  //  7KJnXPZox3NE39H1qu9qn63r/kXX+SVUa/OWUL5CmdtPYA6aToJZjwZUpIshOfS6hNPqEwzqwpzu
  //  ZPVO0pn1h+IMOyFRTOTNXMTpq6j3QXNIr6BqKkEGCSH74Hn5zJf2YWsoG5XCgEQu4NLk149FvcOv
  //  7EHx3nBedqW5b/Yd/GCshi1hbOabWriTWLQLv7dAs76DjMrpvtbH2/kZDIR+RdfVULuyc9KqH3gf
  //  THC7NdHl9/4OYPqXpNEPR2V6FJEcmnZ8l40dVWKyx20h4dBhEhxXi+Avn7aWXDUZCQMi7bMY5Mga
  //  PNTu4o4mMNQMKX5b/3uzWX1IC6+4OUWIdyuWO7V8w6PcrbDFO9Xtxd6WGR1AlqqTG9Y1cQMkX1Fp
  //  MJGy3A1E5SrSIlnMuQncV9shz1+OR0ZcqXz1mO7RDUidL6F28DFXCLGECfVJSBf8I5hBJURCsfP3
  //  rLKP80Fvnjdj+FkGj/NDa6zh29pEphLDX8TgQIHZGm5N0xtn1ee2uBVgHsAFDGKo49bbKHGd+JSu
  //  ar7W7FiNIfhLDkkYEaSZX2O1zhpoK4wljijv9ACyBNLbNKLOOtU1RMeMipzasMuMi3jwCPg8HaXv
  //  r9VYkBRcBZYhPGDS4NIuWECW1U+ujLXesyd/KeBY/ECLZT8ToPomPcXUgEXJHX6COTA2Sue0QlAs
  //  LbPOhowKQqkYOniZo/ARGLH4hYc99g0LAali5dly4sC6x7za9hxpNsm41+AvGjkrcezFWco6U3k8
  //  tpOiRR3ZYnfBDlit+97xH5cvZY7Ij/4aXrI7U5ndrrNfhBPpuW72RBgxm7ahli9IwW43Sg/jU2AQ
  //  UUr7SvPSdaY1Drsrz1iwT+egPbdLZ5sqzHPyXNz3/hlZPe9BgKPLFMw/X+D42s2S/Rf7gvdupGC4
  //  EpZagc66qyhiN1xBXjMel5inlg/ACrVqVySx+pkV/iAqLU7XUJ9DFSdpSbaljOjMjCVKTTOqj+Wz
  //  nijPCuhjUhDOUw4FpVd/B5lVeqxLVD+l7YQ3/FgTLSV2fhobL6CsjZhf/ZHXQJtoR5qeuzQ1LFHU
  //  xVESEhFJpIrPRhJc1HOrEA6NUUdaZ3Uf3zcbjZzTfXCy7Qh/Wmc+tqcX15cYunzDiw5VA9oL7VI9
  //  VRMRsbZJHtTZ00vFqD4Yd/RRhx3dFX1lGP4h4AxkhGBlbQs9Oouoi6eKPUTRRaK3YrRzc5Cqtps/
  //  ZPOn2kmFnQd6FWkJ/FEVC8F3zqiqu16/I2vw4KT2SOMO69YxfdtsfM8yKFf6jKxJAIl+Hj3uQ+g7
  //  PC7m9SOgzRWMfOi/H/HelMZbq/5j/tIngqOuJg8BUgSmMSKqUNjeueaUxZffCYWGCr1AUgtVQzIG
  //  0ao1ZPw07LneJh9f3/hSyShg3+3MP1lGO6ZwimAZ5M9y44KxZwT8iJ9LqbKAUkRuHQ3Jy6F8CC+Z
  //  rLiUmW+ux+GieqZ9OiK+25RuyTX83Qq65eCAQkJp27ms3utu7H60e4Ca99S1+gku4hEQJro6YLOh
  //  AbxhLmY4wfqDaGe1p+RAsxyUcQk40PYiOEvGyPiVdQ8Nt8iIYEHHVglnrxdTeXXsv+1UNpQ2uPXa
  //  /GjdGUy8dEb3AjUWFysDQPAk4vlCY5yi9Ko5EBTNuNhF6aZvYLqllv/wfa3d3eaFHgfvy/IMHQf7
  //  JWzGI+kI7Mspmarf68EFqF21f5p8CMZd4zYU1JhClr6kD2GJnEJLPz1naTvJvrwOyR6r8J/n3628
  //  sqf/bLplz5Xs25sZKj+jmA8xNDKmXptT3l3pw2pqxIVA5tRakXRjOPSD
  //  


  email.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.