Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Send Encrypted Email using Certificate in Apple Keychain
See more Apple Keychain Examples
Send encrypted (S/MIME) email using a certificate found in the Apple Keychain.Note: This example requires Chilkat v10.1.2 or later.
Chilkat Pascal (Lazarus/Delphi) Downloads
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.Secrets,
Chilkat.Cert,
Chilkat.Email,
Chilkat.JsonObject;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
email: TEmail;
recipientEmailAddr: string;
cert: TCert;
mailman: TMailMan;
secrets: TSecrets;
json: TJsonObject;
begin
success := False;
email := TEmail.Create;
email.Subject := 'This email is encrypted';
email.Body := 'This is a S/MIME encrypted mail';
email.From := 'Joe <joe@example.com>';
// Emails are encrypted using the recipient's certificate.
recipientEmailAddr := 'jane@example2.com';
email.AddTo('',recipientEmailAddr);
// Indicate that the email is to be sent encrypted.
email.SendEncrypted := True;
cert := TCert.Create;
// -----------------------------------------------
// This example requires Chilkat v10.1.2 or later.
// -----------------------------------------------
// The recipient's certificate is used to encrypt.
// This will load the certificate from the Apple Keychain.
success := cert.LoadByEmailAddress(recipientEmailAddr);
if (success <> True) then
begin
WriteLn(cert.LastErrorText);
Exit;
end;
// Specify the certificate to be used for encryption.
success := email.SetEncryptCert(cert);
email.SendEncrypted := True;
mailman := TMailMan.Create;
mailman.SmtpHost := 'smtp.example.com';
mailman.SmtpUsername := 'joe@example.com';
mailman.SmtpPort := 587;
mailman.StartTLS := True;
// We'll get the SMTP password from the Apple Keychain.
// See how we originally saved the email credentials to the Keychain here:
// Save Email Credentials in Apple Keychain or Windows Credentials Manager
secrets := TSecrets.Create;
// On Windows, this is the Windows Credentials Manager
// On MacOS/iOS, it is the Apple Keychain
secrets.Location := 'local_manager';
// Specify the name of the secret.
// service and username are required.
// appName and domain are optional.
// Note: The values are arbitrary and can be anything you want.
json := TJsonObject.Create;
json.UpdateString('appName','MyEmailApp');
json.UpdateString('service','SMTP');
json.UpdateString('domain','example.com');
json.UpdateString('username','joe@example.com');
mailman.SmtpPassword := secrets.GetSecretStr(json);
// Send the encrypted email.
// The email is encrypted and sent within the SendEmail function.
success := mailman.SendEmail(email);
if (success <> True) then
begin
WriteLn(mailman.LastErrorText);
Exit;
end;
WriteLn('Encrypted email sent!');
email.Free;
cert.Free;
mailman.Free;
secrets.Free;
json.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.