Sample code for 30+ languages & platforms
DataFlex

Connect to IMAP Through an SSH Tunnel

See more IMAP Examples

Demonstrates the Chilkat Imap.SshOpenTunnel method, which connects to an SSH server and prepares a tunnel through which a later IMAP connection is routed. The first argument is the SSH server hostname and the second is the SSH port (usually 22). After it succeeds, authenticate the tunnel, then call Connect and Login for the IMAP server.

Background: SSH tunneling (port forwarding) routes the IMAP session inside an encrypted SSH connection. It is used to reach a mail server that is only accessible from behind a bastion/jump host, or to add a second layer of transport security. The order is fixed: open the tunnel, authenticate to SSH, then connect and log in to IMAP — and close the tunnel with SshCloseTunnel when finished.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoImap
    Integer iSshPort
    String sSshPassword
    String sTemp1

    Move False To iSuccess

    //  Demonstrates the Imap.SshOpenTunnel method, which connects to an SSH server and prepares a
    //  tunnel for a later IMAP connection.  The 1st argument is the SSH server hostname and the
    //  2nd is the SSH port (usually 22).

    Get Create (RefClass(cComChilkatImap)) To hoImap
    If (Not(IsComObjectCreated(hoImap))) Begin
        Send CreateComObject of hoImap
    End

    //  Open the SSH tunnel.  Port 22 is the usual SSH port.
    Move 22 To iSshPort
    Get ComSshOpenTunnel Of hoImap "ssh.example.com" iSshPort To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    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.

    //  Authenticate the SSH tunnel with a username and password.
    Get ComSshAuthenticatePw Of hoImap "sshUser" sSshPassword To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    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.
    Set ComSsl Of hoImap To True
    Set ComPort Of hoImap To 993
    Get ComConnect Of hoImap "imap.example.com" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComLogin Of hoImap "user@example.com" "myPassword" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComDisconnect Of hoImap To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Close the tunnel when finished with the IMAP connection.
    Get ComSshCloseTunnel Of hoImap To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End



End_Procedure