Sample code for 30+ languages & platforms
C++

POP3 to SMTP Forwarder

Read a POP3 mailbox and forwards the email to another email address, keeping the recipients in the original email the same.

Chilkat C++ Downloads

C++
#include <CkMailMan.h>
#include <CkStringTable.h>
#include <CkBinData.h>

void ChilkatSample(void)
    {
    bool success = false;

    //  This example requires the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    CkMailMan mailman;

    //  Set the POP3 server's hostname
    mailman.put_MailHost("pop.example.com");

    //  Set the POP3 login/password.
    mailman.put_PopUsername("MY_POP3_LOGIN");
    mailman.put_PopPassword("MY_POP3_PASSWORD");

    //  Set the SMTP hostname for sending.
    mailman.put_SmtpHost("smtp.example.com");
    mailman.put_SmtpUsername("MY_SMTP_LOGIN");
    mailman.put_SmtpPassword("MY_SMTP_PASSWORD");

    const char *fromAddr = "me@example.com";
    const char *toAddr = "recipient@somewhere.com";

    //  The the UIDLs for all email in the POP3 mailbox.
    CkStringTable stUidls;
    success = mailman.FetchUidls(stUidls);
    if (success == false) {
        std::cout << mailman.lastErrorText() << "\r\n";
        return;
    }

    //  Just mark messages for delete, then delete at the end.
    mailman.put_ImmediateDelete(false);

    //  Download the email from the server.  Call FetchMimeBd
    //  because we don't want to load the emails into email objects.
    //  (We'll delete the emails that are forwarded without error.)
    CkBinData bdMime;

    int count = stUidls.get_Count();
    int i = 0;
    while (i < count) {
        const char *uidl = stUidls.stringAt(i);
        std::cout << "UIDL: " << uidl << "\r\n";

        success = mailman.FetchMimeBd(uidl,bdMime);
        if (success == false) {
            std::cout << mailman.lastErrorText() << "\r\n";
            return;
        }

        success = mailman.SendMimeBd(fromAddr,toAddr,bdMime);
        if (success == false) {
            std::cout << mailman.lastErrorText() << "\r\n";
            return;
        }

        success = mailman.DeleteByUidl(uidl);
        if (success == false) {
            std::cout << mailman.lastErrorText() << "\r\n";
            return;
        }

        i = i + 1;
    }

    //  Delete messages marked for delete.
    mailman.put_ImmediateDelete(true);
    success = mailman.Pop3EndSession();
    if (success == false) {
        std::cout << mailman.lastErrorText() << "\r\n";
        return;
    }

    std::cout << "Success." << "\r\n";
    }