Sample code for 30+ languages & platforms
AutoIt

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