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

Move Selected Emails to another Mailbox Folder

See more IMAP Examples

Downloads emails one by one in a selected mailbox, decides which emails are to be moved, and then moves the set of messages to another mailbox folder.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Email;
import com.chilkatsoft.chilkat2.Imap;
import com.chilkatsoft.chilkat2.MessageSet;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        Imap imap = new Imap();

        // Connect to an IMAP server.
        // Use TLS
        imap.setSsl(true);
        imap.setPort(993);
        try {
            imap.connect("imap.example.com");

            // Login
            imap.login("myLogin", "myPassword");

            // Select an IMAP mailbox
            imap.selectMailbox("Inbox");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Normally, when an email is downloaded, its "Seen" flag is automatically set.
        // We don't want our program to be interfering with the "Seen" flags.
        // To do this, set the PeekMode to true.
        imap.setPeekMode(true);

        // After selecting the mailbox, the NumMessages property
        // will contain the number of emails in the mailbox.
        // When sequence numbers (not UIDs) are used to reference emails,
        // they range from 1 to N, where N is the number of messages in the mailbox.
        // This example will download the headers by sequence numbers.
        int numEmails = imap.getNumMessages();

        MessageSet mset = new MessageSet();

        // Indicate that mset contains sequence numbers, not UIDs.
        mset.setHasUids(false);

        // Fetch each email and decide for each if it is to be moved
        // to a particular other mailbox.  If so, we'll add the sequence number to
        // the mset, and then move all emails in the mset to the other mailbox.
        Email email = new Email();
        int i = 0;
        while (i < numEmails) {
            // Fetch the email by sequence number.
            try {
                imap.fetchEmail(false, i + 1, false, email);
            } catch (ChilkatException e) {
                System.out.println(e.getLastErrorText());
                return;
            }

            // If it is decided to move the email, add the sequence number to mset, like this:
            mset.insertId(i + 1);
        }

        // If there are emails in mset to be moved, then do it..
        if (mset.getCount() > 0) {
            String destFolder = "Inbox/SomeOtherFolder";
            // Assuming your IMAP server supports the feature that allows for messages to be moved to another folder...
            try {
                imap.moveMessages(mset, destFolder);
            } catch (ChilkatException e) {
                System.out.println(e.getLastErrorText());
                return;
            }
        }

        // Disconnect from the IMAP server.
        imap.disconnect();
    }
}