DataFlex
DataFlex
IMAP SSH Tunneling (Port Forwarding)
Demonstrates how to setup and use an SSH tunnel for IMAP.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoImap
String sSshHostname
Integer iSshPort
Integer iMsgCount
Integer iUpperBound
Variant vEmail
Handle hoEmail
Integer i
Boolean iBUid
String sTemp1
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatImap)) To hoImap
If (Not(IsComObjectCreated(hoImap))) Begin
Send CreateComObject of hoImap
End
// 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).
Move "www.mysshserver.com" To sSshHostname
Move 22 To iSshPort
// Connect to an SSH server and establish the SSH tunnel:
Get ComSshOpenTunnel Of hoImap sSshHostname iSshPort To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Get ComSshAuthenticatePw Of hoImap "mySshLogin" "mySshPassword" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Set ComSsl Of hoImap To True
Set ComPort Of hoImap To 993
Get ComConnect Of hoImap "imap.my-imap-server.com" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Authenticate with the IMAP server via the SSH tunnel.
Get ComLogin Of hoImap "myLogin" "myPassword" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Select an IMAP mailbox
Get ComSelectMailbox Of hoImap "Inbox" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// How many messages in Inbox?
Get ComNumMessages Of hoImap To iMsgCount
If (iMsgCount = 0) Begin
Showln "No messages found."
Procedure_Return
End
Move 10 To iUpperBound
If (iMsgCount < iUpperBound) Begin
Move iMsgCount To iUpperBound
End
// Download up to the 1st 10 messages.
Get Create (RefClass(cComChilkatEmail)) To hoEmail
If (Not(IsComObjectCreated(hoEmail))) Begin
Send CreateComObject of hoEmail
End
Move False To iBUid
For i From 1 To iUpperBound
Get pvComObject of hoEmail to vEmail
Get ComFetchEmail Of hoImap False i iBUid vEmail To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComFrom Of hoEmail To sTemp1
Showln sTemp1
Get ComSubject Of hoEmail To sTemp1
Showln sTemp1
Showln "----"
Loop
// Disconnect from the IMAP server.
// The SSH tunnel remains open.
Get ComDisconnect Of hoImap To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// It is possible to re-use the existing SSH tunnel for the next connection:
Get ComConnect Of hoImap "imap.my-imap-server2.com" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Review the LastErrorText to see that the connection was made via the SSH tunnel:
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Get ComDisconnect Of hoImap To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Finally, close the SSH tunnel.
Get ComSshCloseTunnel Of hoImap To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
Showln "IMAP SSH tunneling example completed."
End_Procedure