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

Dart
import 'package:chilkat/chilkat.dart';

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

  final imap = CkImap();

  // Connect to an IMAP server.
  // Use TLS
  imap.ssl = true;
  imap.port = 993;
  try {
    imap.connect('imap.example.com');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Login
  try {
    imap.login('myLogin', 'myPassword');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Select an IMAP mailbox
  try {
    imap.selectMailbox('Inbox');
  } on ChilkatException catch (e) {
    print(e.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.
  final numEmails = imap.numMessages;

  final mset = CkMessageSet();

  // 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.
  final email = CkEmail();
  final i = 0;
  while (i < numEmails) {
    // Fetch the email by sequence number.
    try {
      imap.fetchEmail(false, i + 1, false, email);
    } on ChilkatException catch (e) {
      print(e.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) {
    final 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);
    } on ChilkatException catch (e) {
      print(e.lastErrorText);
      return;
    }
  }

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