Chilkat Examples

ChilkatHOMEAndroid™Classic ASPCC++C#Mono C#.NET Core C#C# UWP/WinRTDataFlexDelphi ActiveXDelphi DLLVisual FoxProJavaLianjaMFCObjective-CPerlPHP ActiveXPHP ExtensionPowerBuilderPowerShellPureBasicPythonRubySQL ServerSwiftTclUnicode CUnicode C++Visual Basic 6.0VB.NETVB.NET UWP/WinRTVBScriptXojo PluginNode.jsExcel

C++ Examples

Async
Certificates
ECC
Email Object
Encryption
FTP
HTML-to-XML/Text
Gzip
HTTP
IMAP
JSON
Jwt
MHT / HTML Email
PEM
PFX/P12
Java KeyStore (JKS)
OAuth2
POP3
RSA Encryption
MIME
REST
SCP
SMTP
Socket/SSL/TLS
SSH Key
SSH
SSH Tunnel
SFTP
Stream
Tar Archive
XML
XMP
Zip

More Examples...
OpenSSL
Facebook
Google APIs
Google Cloud Storage
Azure Cloud Storage
Amazon S3 (new)
Google Drive
Dropbox
Amazon SQS
Amazon SNS
Amazon SES
Firebase
ASN.1
PRNG
Amazon S3
Bounced Email
CSV
Diffie-Hellman
DKIM / DomainKey
DSA
NTLM
QuickBooks
Spider
Digital Signatures

 

 

 

 

 

 

 

(C++) IMAP SSH Tunneling (Port Forwarding)

Demonstrates how to setup and use an SSH tunnel for IMAP.

Chilkat C/C++ Library Downloads

MS Visual C/C++

Linux/CentOS/Heroku C/C++

MAC OS X C/C++

C++ Builder

Solaris C/C++

iOS C/C++

Android C/C++

Raspberry Pi C/C++

Windows Mobile 5.0/Pocket PC 2003

ARM Embedded Linux C/C++

PowerLinux C/C++

FreeBSD C/C++

MinGW C/C++

#include <CkImap.h>
#include <CkEmail.h>

void ChilkatSample(void)
    {
    CkImap imap;

    bool success;

    //  Anything unlocks the component and begins a fully-functional 30-day trial.
    success = imap.UnlockComponent("Anything for 30-day trial");
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  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).
    const char *sshHostname = "www.mysshserver.com";
    int sshPort = 22;

    //  Connect to an SSH server and establish the SSH tunnel:
    success = imap.SshOpenTunnel(sshHostname,sshPort);
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  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 = imap.SshAuthenticatePw("mySshLogin","mySshPassword");
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  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.
    imap.put_Ssl(true);
    imap.put_Port(993);
    success = imap.Connect("imap.my-imap-server.com");
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  Authenticate with the IMAP server via the SSH tunnel.
    success = imap.Login("myLogin","myPassword");
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  Select an IMAP mailbox
    success = imap.SelectMailbox("Inbox");
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  How many messages in Inbox?
    int msgCount = imap.get_NumMessages();
    if (msgCount == 0) {
        std::cout << "No messages found." << "\r\n";
        return;
    }

    int upperBound = 10;
    if (msgCount < upperBound) {
        upperBound = msgCount;
    }

    //  Download up to the 1st 10 messages.
    int i;
    bool bUid = false;
    for (i = 1; i <= upperBound; i++) {

        CkEmail *email = imap.FetchSingle(i,bUid);
        if (email == 0 ) {
            std::cout << imap.lastErrorText() << "\r\n";
            return;

        }
        else {
            std::cout << email->ck_from() << "\r\n";
            std::cout << email->subject() << "\r\n";
            std::cout << "----" << "\r\n";

            delete email;
        }

    }

    //  Disconnect from the IMAP server.
    //  The SSH tunnel remains open.
    success = imap.Disconnect();
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  It is possible to re-use the existing SSH tunnel for the next connection:
    success = imap.Connect("imap.my-imap-server2.com");
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  Review the LastErrorText to see that the connection was made via the SSH tunnel:
    std::cout << imap.lastErrorText() << "\r\n";

    success = imap.Disconnect();
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    //  Finally, close the SSH tunnel.
    success = imap.SshCloseTunnel();
    if (success != true) {
        std::cout << imap.lastErrorText() << "\r\n";
        return;
    }

    std::cout << "IMAP SSH tunneling example completed." << "\r\n";

    }

 

© 2000-2016 Chilkat Software, Inc. All Rights Reserved.