![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) IMAP SSH Tunneling (Port Forwarding)Demonstrates how to setup and use an SSH tunnel for IMAP. Note: This example requires Chilkat v11.0.0 or greater.
IncludeFile "CkEmail.pb" IncludeFile "CkImap.pb" Procedure ChilkatExample() success.i = 0 ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. imap.i = CkImap::ckCreate() If imap.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; 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). sshHostname.s = "www.mysshserver.com" sshPort.i = 22 ; Connect to an SSH server and establish the SSH tunnel: success = CkImap::ckSshOpenTunnel(imap,sshHostname,sshPort) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn 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. success = CkImap::ckSshAuthenticatePw(imap,"mySshLogin","mySshPassword") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn 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. CkImap::setCkSsl(imap, 1) CkImap::setCkPort(imap, 993) success = CkImap::ckConnect(imap,"imap.my-imap-server.com") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn EndIf ; Authenticate with the IMAP server via the SSH tunnel. success = CkImap::ckLogin(imap,"myLogin","myPassword") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn EndIf ; Select an IMAP mailbox success = CkImap::ckSelectMailbox(imap,"Inbox") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn EndIf ; How many messages in Inbox? msgCount.i = CkImap::ckNumMessages(imap) If msgCount = 0 Debug "No messages found." CkImap::ckDispose(imap) ProcedureReturn EndIf upperBound.i = 10 If msgCount < upperBound upperBound = msgCount EndIf ; Download up to the 1st 10 messages. email.i = CkEmail::ckCreate() If email.i = 0 Debug "Failed to create object." ProcedureReturn EndIf i.i bUid.i = 0 For i = 1 To upperBound success = CkImap::ckFetchEmail(imap,0,i,bUid,email) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkEmail::ckDispose(email) ProcedureReturn EndIf Debug CkEmail::ckFrom(email) Debug CkEmail::ckSubject(email) Debug "----" Next ; Disconnect from the IMAP server. ; The SSH tunnel remains open. success = CkImap::ckDisconnect(imap) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkEmail::ckDispose(email) ProcedureReturn EndIf ; It is possible to re-use the existing SSH tunnel for the next connection: success = CkImap::ckConnect(imap,"imap.my-imap-server2.com") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkEmail::ckDispose(email) ProcedureReturn EndIf ; Review the LastErrorText to see that the connection was made via the SSH tunnel: Debug CkImap::ckLastErrorText(imap) success = CkImap::ckDisconnect(imap) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkEmail::ckDispose(email) ProcedureReturn EndIf ; Finally, close the SSH tunnel. success = CkImap::ckSshCloseTunnel(imap) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkEmail::ckDispose(email) ProcedureReturn EndIf Debug "IMAP SSH tunneling example completed." CkImap::ckDispose(imap) CkEmail::ckDispose(email) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.