AutoIt
AutoIt
IMAP SSH Tunneling (Port Forwarding)
Demonstrates how to setup and use an SSH tunnel for IMAP.Chilkat AutoIt Downloads
Local $bSuccess = False
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
$oImap = ObjCreate("Chilkat.Imap")
; 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 = "www.mysshserver.com"
Local $iSshPort = 22
; Connect to an SSH server and establish the SSH tunnel:
$bSuccess = $oImap.SshOpenTunnel($sshHostname,$iSshPort)
If ($bSuccess = False) Then
ConsoleWrite($oImap.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 IMAP server, it is
; for authenticating with the SSH server, which is separate.
$bSuccess = $oImap.SshAuthenticatePw("mySshLogin","mySshPassword")
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; OK, the SSH tunnel is setup. The IMAP component may
; be used exactly the same as usual, except all communications
; are sent through the SSH tunnel.
; Connect to an IMAP server via the SSH tunnel.
; Because the SSH tunnel has been previously setup,
; this does not establish a direct connection with the IMAP
; server. It directs the SSH server to establish the connection.
; In this example, the IMAP server requires SSL/TLS. The TLS connection
; will be enclosed within the SSH tunnel.
$oImap.Ssl = True
$oImap.Port = 993
$bSuccess = $oImap.Connect("imap.my-imap-server.com")
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; Authenticate with the IMAP server via the SSH tunnel.
$bSuccess = $oImap.Login("myLogin","myPassword")
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; Select an IMAP mailbox
$bSuccess = $oImap.SelectMailbox("Inbox")
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; How many messages in Inbox?
Local $iMsgCount = $oImap.NumMessages
If ($iMsgCount = 0) Then
ConsoleWrite("No messages found." & @CRLF)
Exit
EndIf
Local $iUpperBound = 10
If ($iMsgCount < $iUpperBound) Then
$iUpperBound = $iMsgCount
EndIf
; Download up to the 1st 10 messages.
$oEmail = ObjCreate("Chilkat.Email")
Local $i
Local $bUid = False
For $i = 1 To $iUpperBound
$bSuccess = $oImap.FetchEmail(False,$i,$bUid,$oEmail)
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite($oEmail.From & @CRLF)
ConsoleWrite($oEmail.Subject & @CRLF)
ConsoleWrite("----" & @CRLF)
Next
; Disconnect from the IMAP server.
; The SSH tunnel remains open.
$bSuccess = $oImap.Disconnect()
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; It is possible to re-use the existing SSH tunnel for the next connection:
$bSuccess = $oImap.Connect("imap.my-imap-server2.com")
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; Review the LastErrorText to see that the connection was made via the SSH tunnel:
ConsoleWrite($oImap.LastErrorText & @CRLF)
$bSuccess = $oImap.Disconnect()
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
; Finally, close the SSH tunnel.
$bSuccess = $oImap.SshCloseTunnel()
If ($bSuccess = False) Then
ConsoleWrite($oImap.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite("IMAP SSH tunneling example completed." & @CRLF)