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

Authenticate an SSH Tunnel with a Password

See more SMTP Examples

Demonstrates the Chilkat MailMan.SshAuthenticatePw method, which authenticates with the SSH server using an SSH username and password after an SSH tunnel has been opened. The first argument is the SSH account name and the second is the corresponding password. This example opens a tunnel, authenticates, and sends SMTP traffic through it.

Background: Opening an SSH tunnel and authenticating to the SSH server are two separate steps, and note the SSH credentials are distinct from the mail account credentials — the SSH login gets you through the tunnel, while SmtpUsername/SmtpPassword authenticate to the mail server at the far end. Password authentication is the simplest option; public-key authentication (SshAuthenticatePk) is generally preferred for automated systems.

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;

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

procedure RunDemo;
var
  success: Boolean;
  mailman: TMailMan;

begin
  success := False;

  //  Demonstrates the MailMan.SshAuthenticatePw method, which authenticates with the SSH server
  //  using an SSH username and password after an SSH tunnel has been opened.  The 1st argument
  //  is the SSH account name and the 2nd is the corresponding password.

  mailman := TMailMan.Create;

  //  Configure the SMTP server connection.  These connections will travel through the tunnel.
  mailman.SmtpHost := 'smtp.example.com';
  mailman.SmtpPort := 465;
  mailman.SmtpSsl := True;
  mailman.SmtpUsername := 'user@example.com';
  mailman.SmtpPassword := 'myPassword';

  //  Open the SSH tunnel first.
  success := mailman.SshOpenTunnel('ssh.example.com',22);
  if (success = False) then
    begin
      WriteLn(mailman.LastErrorText);
      Exit;
    end;

  //  Authenticate with the SSH server using a username and password.
  success := mailman.SshAuthenticatePw('sshUser','sshPassword');
  if (success = False) then
    begin
      WriteLn(mailman.LastErrorText);
      Exit;
    end;

  WriteLn('SSH tunnel authenticated.');

  //  SMTP operations now travel through the SSH tunnel.
  success := mailman.VerifySmtpLogin();
  if (success = False) then
    begin
      WriteLn(mailman.LastErrorText);
      Exit;
    end;

  success := mailman.SshCloseTunnel();
  if (success = False) then
    begin
      WriteLn(mailman.LastErrorText);
      Exit;
    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.