Sample code for 30+ languages & platforms
AutoIt Requires Chilkat v11.0.0+

POP3 SSH Tunneling (Port Forwarding)

Demonstrates how to connect to a POP3 server through an SSH tunnel. Reads a POP3 mailbox and display the FROM and SUBJECT header fields of each email.

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

;  This example requires the Chilkat API to have been previously unlocked.
;  See Global Unlock Sample for sample code.

;  The mailman object is used for receiving (POP3) 
;  and sending (SMTP) email.
$oMailman = ObjCreate("Chilkat.MailMan")

;  The SSH hostname may be a hostname or an 
;  IP address, such as "192.168.1.108".
;  The port is typically 22 (the standard port for SSH).
Local $sshHostname = "sftp.example.com"
Local $iSshPort = 22

;  Connect to an SSH server and establish the SSH tunnel:
$bSuccess = $oMailman.SshOpenTunnel($sshHostname,$iSshPort)
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  Authenticate with the SSH server via a login/password
;  or with a public key.
;  This example demonstrates SSH password authentication.
;  Note: This is not authenticating with the POP3 server, it is
;  for authenticating with the SSH server, which is separate.
$bSuccess = $oMailman.SshAuthenticatePw("ssh_login","ssh_password")
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  OK, the SSH tunnel is setup.  The mailman may
;  be used exactly the same as usual, except all communications
;  are now sent through the SSH tunnel.

;  The SSH tunnel may be kept open for any number of 
;  POP3 connections.  

;  Set the POP3 server's hostname
$oMailman.MailHost = "mail.my-pop3-server.com"

;  Set the POP3 settings for your POP3 server:
$oMailman.PopUsername = "pop3_login"
$oMailman.PopPassword = "pop3_password"
$oMailman.MailPort = 995
$oMailman.PopSsl = True

;  Connect to the POP3 server through the already-established SSH tunnel:
$bSuccess = $oMailman.Pop3BeginSession()
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  A visual inspection of the LastErrorText after
;  a successful POP3 connection will confirm the SSH tunneling.
;  Note: If the POP3 connection uses SSL/TLS, then the SSL/TLS 
;  secure channel will be wrapped within the SSH tunnel.
ConsoleWrite($oMailman.LastErrorText & @CRLF)

;  How many messages are in the POP3 inbox?
Local $iNumToDownload = $oMailman.GetMailboxCount()
If ($iNumToDownload > 5) Then
    $iNumToDownload = 5
EndIf

If ($iNumToDownload = 0) Then
    ConsoleWrite("No messages in the POP3 inbox." & @CRLF)
    Exit
EndIf

;  Download a max of 5 messages
Local $i
$oEmail = ObjCreate("Chilkat.Email")
For $i = 1 To $iNumToDownload
    $bSuccess = $oMailman.FetchOne(False,0,$i,$oEmail)
    If ($bSuccess = False) Then
        ConsoleWrite($oMailman.LastErrorText & @CRLF)
        Exit
    EndIf

    ConsoleWrite($oEmail.From & @CRLF)
    ConsoleWrite($oEmail.Subject & @CRLF)
    ConsoleWrite("----" & @CRLF)
Next

;  Close the connection with the POP3 server, leaving the SSH tunnel open for subsequent POP3 connections.
$bSuccess = $oMailman.Pop3EndSession()
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  Try connecting to a different POP3 server through the same aleady setup SSH tunnel:
;  Set the POP3 server's hostname
$oMailman.MailHost = "mail.my-pop3-server2.com"

;  Set the POP3 settings for your POP3 server:
$oMailman.PopUsername = "pop3_login2"
$oMailman.PopPassword = "pop3_password2"
$oMailman.MailPort = 110
$oMailman.PopSsl = False

$bSuccess = $oMailman.Pop3BeginSession()
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  Review the LastErrorText to see that the connection was made via the SSH tunnel:
ConsoleWrite($oMailman.LastErrorText & @CRLF)

$bSuccess = $oMailman.Pop3EndSession()
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  Close the SSH tunnel.
$bSuccess = $oMailman.SshCloseTunnel()
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf