DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoMailman
String sSshHostname
Integer iSshPort
Integer iNumToDownload
Integer i
Variant vEmail
Handle hoEmail
String sTemp1
Move False To iSuccess
// 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.
Get Create (RefClass(cComChilkatMailMan)) To hoMailman
If (Not(IsComObjectCreated(hoMailman))) Begin
Send CreateComObject of hoMailman
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 "sftp.example.com" To sSshHostname
Move 22 To iSshPort
// Connect to an SSH server and establish the SSH tunnel:
Get ComSshOpenTunnel Of hoMailman sSshHostname iSshPort To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman 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 POP3 server, it is
// for authenticating with the SSH server, which is separate.
Get ComSshAuthenticatePw Of hoMailman "ssh_login" "ssh_password" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
// 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
Set ComMailHost Of hoMailman To "mail.my-pop3-server.com"
// Set the POP3 settings for your POP3 server:
Set ComPopUsername Of hoMailman To "pop3_login"
Set ComPopPassword Of hoMailman To "pop3_password"
Set ComMailPort Of hoMailman To 995
Set ComPopSsl Of hoMailman To True
// Connect to the POP3 server through the already-established SSH tunnel:
Get ComPop3BeginSession Of hoMailman To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
// How many messages are in the POP3 inbox?
Get ComGetMailboxCount Of hoMailman To iNumToDownload
If (iNumToDownload > 5) Begin
Move 5 To iNumToDownload
End
If (iNumToDownload = 0) Begin
Showln "No messages in the POP3 inbox."
Procedure_Return
End
// Download a max of 5 messages
Get Create (RefClass(cComChilkatEmail)) To hoEmail
If (Not(IsComObjectCreated(hoEmail))) Begin
Send CreateComObject of hoEmail
End
For i From 1 To iNumToDownload
Get pvComObject of hoEmail to vEmail
Get ComFetchOne Of hoMailman False 0 i vEmail To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman 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
// Close the connection with the POP3 server, leaving the SSH tunnel open for subsequent POP3 connections.
Get ComPop3EndSession Of hoMailman To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
// Try connecting to a different POP3 server through the same aleady setup SSH tunnel:
// Set the POP3 server's hostname
Set ComMailHost Of hoMailman To "mail.my-pop3-server2.com"
// Set the POP3 settings for your POP3 server:
Set ComPopUsername Of hoMailman To "pop3_login2"
Set ComPopPassword Of hoMailman To "pop3_password2"
Set ComMailPort Of hoMailman To 110
Set ComPopSsl Of hoMailman To False
Get ComPop3BeginSession Of hoMailman To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
// Review the LastErrorText to see that the connection was made via the SSH tunnel:
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Get ComPop3EndSession Of hoMailman To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
// Close the SSH tunnel.
Get ComSshCloseTunnel Of hoMailman To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
End_Procedure