PowerBuilder
PowerBuilder
Connect to IMAP Through an SSH Tunnel
See more IMAP Examples
Demonstrates the Chilkat Imap.SshOpenTunnel method, which connects to an SSH server and prepares a tunnel through which a later IMAP connection is routed. The first argument is the SSH server hostname and the second is the SSH port (usually 22). After it succeeds, authenticate the tunnel, then call Connect and Login for the IMAP server.
Background: SSH tunneling (port forwarding) routes the IMAP session inside an encrypted SSH connection. It is used to reach a mail server that is only accessible from behind a bastion/jump host, or to add a second layer of transport security. The order is fixed: open the tunnel, authenticate to SSH, then connect and log in to IMAP — and close the tunnel with
SshCloseTunnel when finished.Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_Imap
integer li_SshPort
string ls_SshPassword
li_Success = 0
// Demonstrates the Imap.SshOpenTunnel method, which connects to an SSH server and prepares a
// tunnel for a later IMAP connection. The 1st argument is the SSH server hostname and the
// 2nd is the SSH port (usually 22).
loo_Imap = create oleobject
li_rc = loo_Imap.ConnectToNewObject("Chilkat.Imap")
if li_rc < 0 then
destroy loo_Imap
MessageBox("Error","Connecting to COM object failed")
return
end if
// Open the SSH tunnel. Port 22 is the usual SSH port.
li_SshPort = 22
li_Success = loo_Imap.SshOpenTunnel("ssh.example.com",li_SshPort)
if li_Success = 0 then
Write-Debug loo_Imap.LastErrorText
destroy loo_Imap
return
end if
// The SSH password is not hard-coded in source. Insert code here to obtain it from an
// interactive prompt, environment variable, or a secrets vault.
// Authenticate the SSH tunnel with a username and password.
li_Success = loo_Imap.SshAuthenticatePw("sshUser",ls_SshPassword)
if li_Success = 0 then
Write-Debug loo_Imap.LastErrorText
destroy loo_Imap
return
end if
// With the SSH tunnel in place, connect and log in to the IMAP server as usual. The IMAP
// traffic flows through the tunnel automatically.
loo_Imap.Ssl = 1
loo_Imap.Port = 993
li_Success = loo_Imap.Connect("imap.example.com")
if li_Success = 0 then
Write-Debug loo_Imap.LastErrorText
destroy loo_Imap
return
end if
li_Success = loo_Imap.Login("user@example.com","myPassword")
if li_Success = 0 then
Write-Debug loo_Imap.LastErrorText
destroy loo_Imap
return
end if
li_Success = loo_Imap.Disconnect()
if li_Success = 0 then
Write-Debug loo_Imap.LastErrorText
destroy loo_Imap
return
end if
// Close the tunnel when finished with the IMAP connection.
li_Success = loo_Imap.SshCloseTunnel()
if li_Success = 0 then
Write-Debug loo_Imap.LastErrorText
destroy loo_Imap
return
end if
destroy loo_Imap