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

ASN.1
Amazon S3
Amazon S3 (new)
Amazon SES
Amazon SNS
Amazon SQS
Async
Azure Cloud Storage
Azure Service Bus
Bounced Email
CSV
Certificates
Compression
DKIM / DomainKey
DSA
Diffie-Hellman
Digital Signatures
Dropbox
ECC
Email Object
Encryption
FTP
Facebook
Firebase
GeoOp
Google APIs
Google Cloud Storage
Google Drive
Gzip
HTML-to-XML/Text
HTTP
HTTP Misc

IMAP
JSON
Java KeyStore (JKS)
Jwt
MHT / HTML Email
MIME
NTLM
OAuth1
OAuth2
OpenSSL
PEM
PFX/P12
POP3
PRNG
PayPal
Peoplevox
QuickBooks
REST
RSA Encryption
SCP
SFTP
SMTP
SSH
SSH Key
SSH Tunnel
Socket/SSL/TLS
Spider
Stream
Tar Archive
Twitter
XML
XMP
Xero
Zip
curl

 

 

 

(C++) 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 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 <CkMailMan.h>
#include <CkEmail.h>

void ChilkatSample(void)
    {
    //  The mailman object is used for receiving (POP3)
    //  and sending (SMTP) email.
    CkMailMan mailman;

    //  Any string argument automatically begins the 30-day trial.
    bool success = mailman.UnlockComponent("30-day trial");
    if (success != true) {
        std::cout << mailman.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.my-ssh-server.com";
    int sshPort = 22;

    //  Connect to an SSH server and establish the SSH tunnel:
    success = mailman.SshOpenTunnel(sshHostname,sshPort);
    if (success != true) {
        std::cout << mailman.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 POP3 server, it is
    //  for authenticating with the SSH server, which is separate.
    success = mailman.SshAuthenticatePw("ssh_login","ssh_password");
    if (success != true) {
        std::cout << mailman.lastErrorText() << "\r\n";
        return;
    }

    //  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
    mailman.put_MailHost("mail.my-pop3-server.com");

    //  Set the POP3 settings for your POP3 server:
    mailman.put_PopUsername("pop3_login");
    mailman.put_PopPassword("pop3_password");
    mailman.put_MailPort(995);
    mailman.put_PopSsl(true);

    //  Connect to the POP3 server through the already-established SSH tunnel:
    success = mailman.Pop3BeginSession();
    if (success != true) {
        std::cout << mailman.lastErrorText() << "\r\n";
        return;
    }

    //  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.
    std::cout << mailman.lastErrorText() << "\r\n";

    //  How many messages are in the POP3 inbox?
    int numToDownload = mailman.GetMailboxCount();
    if (numToDownload > 5) {
        numToDownload = 5;
    }

    if (numToDownload == 0) {
        return;
    }

    //  Download a max of 5 messages
    int i;
    CkEmail *email = 0;
    for (i = 1; i <= numToDownload; i++) {
        email = mailman.FetchByMsgnum(i);
        if (email == 0 ) {
            std::cout << mailman.lastErrorText() << "\r\n";
            return;
        }

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

    //  Close the connection with the POP3 server, leaving the SSH tunnel open for subsequent POP3 connections.
    success = mailman.Pop3EndSession();
    if (success != true) {
        std::cout << mailman.lastErrorText() << "\r\n";
        return;
    }

    //  Try connecting to a different POP3 server through the same aleady setup SSH tunnel:
    //  Set the POP3 server's hostname
    mailman.put_MailHost("mail.my-pop3-server2.com");

    //  Set the POP3 settings for your POP3 server:
    mailman.put_PopUsername("pop3_login2");
    mailman.put_PopPassword("pop3_password2");
    mailman.put_MailPort(110);
    mailman.put_PopSsl(false);

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

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

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

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


    }

 

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