Sample code for 30+ languages & platforms
React Native 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 React Native Downloads

React Native
import { Email, Imap, MessageSet } from '@chilkat/react-native'

async function chilkatExample() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  const imap = new Imap();

  // Connect to an IMAP server.
  // Use TLS
  imap.ssl = true;
  imap.port = 993;
  try {
    await imap.connectAsync('imap.example.com');
  } catch {
    console.log(imap.lastErrorText);
    return;
  }

  // Login
  try {
    await imap.loginAsync('myLogin', 'myPassword');
  } catch {
    console.log(imap.lastErrorText);
    return;
  }

  // Select an IMAP mailbox
  try {
    await imap.selectMailboxAsync('Inbox');
  } catch {
    console.log(imap.lastErrorText);
    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.peekMode = 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.
  const numEmails = imap.numMessages;

  const mset = new MessageSet();

  // Indicate that mset contains sequence numbers, not UIDs.
  mset.hasUids = 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.
  const email = new Email();
  const i = 0;
  while (i < numEmails) {
    // Fetch the email by sequence number.
    try {
      await imap.fetchEmailAsync(false, i + 1, false, email);
    } catch {
      console.log(imap.lastErrorText);
      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.count > 0) {
    const destFolder = 'Inbox/SomeOtherFolder';
    // Assuming your IMAP server supports the feature that allows for messages to be moved to another folder...
    try {
      await imap.moveMessagesAsync(mset, destFolder);
    } catch {
      console.log(imap.lastErrorText);
      return;
    }
  }

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