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

Close an IMAP SSH Tunnel

See more IMAP Examples

Demonstrates the Chilkat Imap.SshCloseTunnel method, which closes the SSH tunnel opened by SshOpenTunnel. It takes no arguments. Any IMAP connection that was using the tunnel must not be used after the tunnel is closed.

Background: The SSH tunnel is the transport that carries the IMAP session, so closing it tears down that transport. Disconnect or finish with the IMAP connection first, then close the tunnel to release the SSH resources cleanly. Continuing to use an IMAP connection whose tunnel has been closed will fail.

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;

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

procedure RunDemo;
var
  success: Boolean;
  imap: TImap;
  sshPort: Integer;
  sshPassword: string;

begin
  success := False;

  //  Demonstrates the Imap.SshCloseTunnel method, which closes the SSH tunnel opened by
  //  SshOpenTunnel.  It takes no arguments.  Any IMAP connection using the tunnel must not be
  //  used after the tunnel is closed.

  imap := TImap.Create;

  sshPort := 22;
  success := imap.SshOpenTunnel('ssh.example.com',sshPort);
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;

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

  success := imap.SshAuthenticatePw('sshUser',sshPassword);
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;

  //  With the SSH tunnel in place, connect and log in to the IMAP server as usual.  The IMAP
  //  traffic flows through the tunnel automatically.
  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;

  //  ... use the IMAP connection ...

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

  //  Close the SSH tunnel.  Do not use the IMAP connection after this point.
  success := imap.SshCloseTunnel();
  if (success = False) then
    begin
      WriteLn(imap.LastErrorText);
      Exit;
    end;


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