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

Search IMAP Mailbox for Email Matching Criteria

Searching an IMAP mailbox for messages that match search criteria.

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;
  }

  // We can choose to fetch UIDs or sequence numbers.
  final fetchUids = true;

  // Here are examples of different search criteria:

  // Return all messages.
  final allMsgs = 'ALL';

  // Search for already-answered emails.
  final answered = 'ANSWERED';

  // Search for messages on a specific date.
  // The date string is DD-Month-YYYY where Month is
  // Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, or Dec.
  final onDate = 'SENTON 05-Mar-2007';

  // Search for messages between two dates.  SENTBEFORE
  // finds emails sent before a date, and SENTSINCE finds
  // email sent on or after a date.  The "AND" operation
  // is implied by joining criteria, separated by spaces.
  final betweenDates = 'SENTSINCE 01-Mar-2007 SENTBEFORE 05-Mar-2007';

  // Another example of AND: find all unanswered emails
  // sent after 04-Mar-2007 with "Problem" in the subject:
  final complexSearch1 = 'UNANSWERED SENTSINCE 04-Mar-2007 Subject "Problem"';

  // Find messages with a specific string in the body:
  final bodySearch = 'BODY "problem solved"';

  // Using OR.  The syntax is OR <criteria1> <criteria2>. 
  // The "OR" comes first, followed by each criteria.
  // For example, to match all emails with "Help" or "Question" in the subject.
  // You'll notice that literal strings may be quoted or unquoted.
  // If a literal contains SPACE characters, quote it:
  final orSearch = 'OR SUBJECT Help SUBJECT Question';

  // ----------------------------------------------
  // Strings are case-insensitive when searching....
  // ----------------------------------------------

  // Find all emails sent from yahoo.com addresses:
  final fromSearch = 'FROM yahoo.com';
  // Find all emails sent from anyone with "John" in their name:
  final johnSearch = 'FROM John';

  // Find emails with the RECENT flag set:
  final recentSearch = 'RECENT';

  // Find emails that don't have the recent flag set:
  final notRecentSearch = 'NOT RECENT';
  // This is synonymous with "OLD":
  final oldSearch = 'OLD';

  // Find all emails marked for deletion:
  final markedForDeleteSearch = 'DELETED';

  // Find all emails having a specified header field with a value
  // containing a substring:
  final headerSearch = 'HEADER DomainKey-Signature paypal.com';

  // Find any emails having a specific header field.  If the 
  // 2nd argument to the "HEADER" criteria is an empty string,
  // any email having the header field is returned regardless
  // of the header field's content.
  // Find any emails with a DomainKey-Signature field:
  final headerExistsSearch = 'HEADER DomainKey-Signature ""';

  // Find NEW emails: these are emails that have the RECENT flag
  // set, but not the SEEN flag:
  final newSearch = 'NEW';

  // Find emails larger than a certain number of bytes:
  final sizeLargerSearch = 'LARGER 500000';

  // Find emails marked as seen or not already seen:
  final seenSearch = 'SEEN';
  final notSeenSearch = 'NOT SEEN';

  // Find emails having a given substring in the TO header field:
  final toSearch = 'TO support@chilkatsoft.com';
  // A more long-winded way to do the same thing:
  final toSearch2 = 'HEADER TO support@chilkatsoft.com';

  // Find emails smaller than a size in bytes:
  final smallerSearch = 'SMALLER 30000';

  // Find emails that have a substring anywhere in the header
  // or body:
  final fullSubstringSearch = 'TEXT "Zip Component"';

  // Pass any of the above strings here to test a search:
  final messageSet = CkMessageSet();
  try {
    imap.queryMbx(orSearch, fetchUids, messageSet);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Fetch the email headers into a bundle object:
  final bundle = CkEmailBundle();
  final headersOnly = true;
  try {
    imap.fetchMsgSet(headersOnly, messageSet, bundle);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Display the Subject and From of each email.
  final email = CkEmail();
  var i = 0;
  while (i < bundle.messageCount) {
    bundle.emailAt(i, email);

    print(email.getHeaderField('Date'));
    print(email.subject);
    print(email.from);
    print('--');

    i++;
  }

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