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

Send Signed and Encrypted EDI Email (EDIFACT)

Demonstrates how to send a signed and encrypted EDI email (EDIFACT email).

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.MailMan,
  Chilkat.Cert,
  Chilkat.Email;

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

procedure RunDemo;
var
  success: Boolean;
  mailman: TMailMan;
  email: TEmail;
  ediMsg: string;
  name: string;
  filename: string;
  charset: string;
  cert: TCert;

begin
  success := False;

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

  //   The mailman object is used for sending and receiving email.
  mailman := TMailMan.Create;

  //   Create a new email object

  //   Build the basic EDI email where the body is the EDIFACT message:
  ediMsg := 'UNB+IATB:1+6XPPC ...';
  name := 'something';
  filename := 'something';
  charset := 'iso-8859-1';
  email.SetEdifactBody(ediMsg,name,filename,charset);

  email.Subject := 'This is the subject';
  email.From := 'Chilkat Admin <admin@chilkatsoft.com>';
  success := email.AddTo('Chilkat Support','support@chilkatsoft.com');

  //   Indicate that the email should be sent signed.
  email.SendSigned := True;

  //   Tell the mailman to use a PFX file as a source for locating
  //   the certificate and private key required for signing.
  //   The certificate chosen for signing will be the one that
  //   matches the sender's email address, which also has
  //   a private key.  All intermediate certs in the chain of
  //   authentication, up to and including the root, will
  //   be included in the signature.
  success := mailman.AddPfxSourceFile('/pfx_files/myCertAndPrivateKey.pfx','secret');
  if (success <> True) then
    begin
      WriteLn(mailman.LastErrorText);
      Exit;
    end;

  //   Load the .cer file into a certificate object.
  //   When sending S/MIME encrypted email, it is the recipient's
  //   certificate that is used for encryption.  Only the public key
  //   is needed to encrypt.  The recipient is the only
  //   one possessing the private key, and therefore is the only
  //   one able to decrypt.

  success := cert.LoadFromFile('/certs/recipientCert.cer');
  if (success <> True) then
    begin
      WriteLn(cert.LastErrorText);
      Exit;
    end;

  //   Indicate that the email is to be sent encrypted.
  email.SendEncrypted := True;

  //   Indicate that we want 192-bit 3DES encryption:
  email.Pkcs7CryptAlg := '3des';
  email.Pkcs7KeyLength := 192;

  //   Specify the certificate to be used for encryption.
  success := email.SetEncryptCert(cert);

  //   Tell the mailman to use an opaque signature (as opposed to a detached signature)
  mailman.OpaqueSigning := True;

  //   SMTP server (use your settings and refer to the online
  //   reference  documentation for more options)
  mailman.SmtpHost := 'smtp.mymailserver.com';
  mailman.SmtpUsername := 'myLogin';
  mailman.SmtpPassword := 'myPassword';
  mailman.SmtpPort := 587;
  mailman.StartTLS := True;

  //   Send the signed/encrypted EDI email
  success := mailman.SendEmail(email);
  if (success <> True) then
    begin
      WriteLn(mailman.LastErrorText);
    end
  else
    begin
      WriteLn('Mail Sent!');
    end;


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