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

Search IMAP Mailbox for Email Matching Criteria

Searching an IMAP mailbox for messages that match search criteria.

Chilkat React Native Downloads

React Native
import { Email, EmailBundle, 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;
  }

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

  // Here are examples of different search criteria:

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

  // Search for already-answered emails.
  const 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.
  const 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.
  const 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:
  const complexSearch1 = 'UNANSWERED SENTSINCE 04-Mar-2007 Subject "Problem"';

  // Find messages with a specific string in the body:
  const 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:
  const orSearch = 'OR SUBJECT Help SUBJECT Question';

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

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

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

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

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

  // Find all emails having a specified header field with a value
  // containing a substring:
  const 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:
  const headerExistsSearch = 'HEADER DomainKey-Signature ""';

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

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

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

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

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

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

  // Pass any of the above strings here to test a search:
  const messageSet = new MessageSet();
  try {
    await imap.queryMbxAsync(orSearch, fetchUids, messageSet);
  } catch {
    console.log(imap.lastErrorText);
    return;
  }

  // Fetch the email headers into a bundle object:
  const bundle = new EmailBundle();
  const headersOnly = true;
  try {
    await imap.fetchMsgSetAsync(headersOnly, messageSet, bundle);
  } catch {
    console.log(imap.lastErrorText);
    return;
  }

  // Display the Subject and From of each email.
  const email = new Email();
  let i = 0;
  while (i < bundle.messageCount) {
    bundle.emailAt(i, email);

    console.log(email.getHeaderField('Date'));
    console.log(email.subject);
    console.log(email.from);
    console.log('--');

    i++;
  }

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