Sample code for 30+ languages & platforms
Swift Requires Chilkat v11.0.0+

How to Copy IMAP Mail to another IMAP Server

Demonstrates how to copy the entire contents of an IMAP mailbox to another IMAP server.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

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

    let imapSrc = CkoImap()!

    //  Connect to our source IMAP server.
    success = imapSrc.connect(hostname: "imap.example.com")
    if success == false {
        print("\(imapSrc.lastErrorText!)")
        return
    }

    //  Login to the source IMAP server
    success = imapSrc.login(login: "admin@chilkatsoft.com", password: "myPassword")
    if success == false {
        print("\(imapSrc.lastErrorText!)")
        return
    }

    let imapDest = CkoImap()!

    //  Connect to our destination IMAP server.
    success = imapDest.connect(hostname: "mail.example-code.com")
    if success == false {
        print("\(imapDest.lastErrorText!)")
        return
    }

    //  Login to the destination IMAP server
    success = imapDest.login(login: "myLogin", password: "myPassword")
    if success == false {
        print("\(imapDest.lastErrorText!)")
        return
    }

    //  Select an IMAP mailbox on the source IMAP server
    success = imapSrc.selectMailbox(mailbox: "Inbox")
    if success == false {
        print("\(imapSrc.lastErrorText!)")
        return
    }

    //  After selecting a mailbox, the NumMessages property will
    //  be updated to reflect the total number of emails in the mailbox:
    print("\(imapSrc.numMessages.intValue)")

    //  The emails in the mailbox will always have sequence numbers
    //  ranging from 1 to NumMessages.

    //  This example will copy the first 10 messages using sequence numbers
    let sbMime = CkoStringBuilder()!
    var seqNum: Int
    for seqNum = 1; seqNum <= 10; seqNum++ {
        sbMime.clear()
        success = imapSrc.fetchSingle(asMimeSb: seqNum, bUid: false, sbMime: sbMime)
        if success == false {
            print("\(imapSrc.lastErrorText!)")
            return
        }

        success = imapDest.appendMime(withFlagsSb: "Inbox", sbMime: sbMime, seen: false, flagged: false, answered: false, draft: false)
        if success == false {
            print("\(imapDest.lastErrorText!)")
            return
        }

    }

    //  Disconnect from the IMAP servers.
    success = imapSrc.disconnect()
    success = imapDest.disconnect()

}