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

Open an SSH Tunnel for POP3

See more POP3 Examples

Demonstrates the Chilkat MailMan.SshOpenTunnel method, which connects to an SSH server and opens an SSH tunnel for MailMan's SMTP or POP3 connections. The first argument is the SSH server's hostname or IP address and the second is the SSH port. This example opens a tunnel, authenticates, performs a POP3 operation through it, and closes the tunnel.

Background: An SSH tunnel (port forwarding) wraps another protocol's traffic inside an encrypted SSH connection. Here, MailMan's POP3 or SMTP session is carried through the SSH server rather than connecting directly. This is useful when a mail server is only reachable from inside a network you can reach via SSH, or when policy requires all traffic to traverse a bastion host. Opening the tunnel is step one; you must then authenticate to the SSH server before the tunnel carries traffic.

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;
  count: Integer;

begin
  success := False;

  //  Demonstrates the MailMan.SshOpenTunnel method, which connects to an SSH server and opens
  //  an SSH tunnel for MailMan's SMTP or POP3 connections.  The 1st argument is the SSH server
  //  hostname or IP address, and the 2nd is the SSH port.

  mailman := TMailMan.Create;

  //  Configure the POP3 server connection.  These connections will travel through the tunnel.
  mailman.MailHost := 'pop.example.com';
  mailman.MailPort := 995;
  mailman.PopSsl := True;
  mailman.PopUsername := 'user@example.com';
  mailman.PopPassword := 'myPassword';

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

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

  //  POP3 operations now travel through the SSH tunnel.
  count := mailman.GetMailboxCount();
  if (count < 0) then
    begin
      WriteLn('Failed to get the mailbox count.');
    end
  else
    begin
      WriteLn('Mailbox count: ' + count);
    end;

  //  Close the tunnel when finished.
  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.