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

Examine Yahoo Mail IMAP Session Log

See more Yahoo Mail Examples

To examine the IMAP session log, set the KeepSessionLog property = _TRUE_, and then examine the contents of the SessionLog property.

Chilkat React Native Downloads

React Native
import { Imap, JsonObject, Mailboxes } from '@chilkat/react-native'

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

  // See Get Yahoo Mail OAuth2 Access Token for Desktop App 
  // for sample code showing how to obtain a Yahoo Mail access token.

  // In this example, our access token was previously saved to the following file which contains JSON like this:
  // {
  //   "access_token": "kCVQdnOdul...LHucA--",
  //   "refresh_token": "AIenVXETSo0jklFBVkPS8vVm8E.Ej9ToRG.xDbDYmZ65WIs5t6CZhDrD",
  //   "expires_in": 3600,
  //   "token_type": "bearer",
  //   "xoauth_yahoo_guid": "HGDQCVF5JB4YDOWHITQJFBHCWA"
  // }

  const json = new JsonObject();
  try {
    json.loadFile('qa_data/tokens/yahooMail.json');
  } catch {
    console.log('Failed to load Yahoo Mail access token file.');
    return;
  }

  const accessToken = json.stringOf('access_token');

  // Do OAuth2 authentication by using the access token as the password in the Login method below...
  const imap = new Imap();

  imap.ssl = true;
  imap.port = 993;

  // Tell Chilkat IMAP to keep a session log.
  imap.keepSessionLog = true;

  // Connect to the Yahoo IMAP server.
  try {
    await imap.connectAsync('imap.mail.yahoo.com');
  } catch {
    console.log(imap.lastErrorText);
    return;
  }

  // Indicate that XOAUTH2 authentication is to be used:
  imap.authMethod = 'XOAUTH2';

  // Login
  // Use the email address of the Yahoo Mail account that granted authorization.
  try {
    await imap.loginAsync('user@yahoo.com', accessToken);
    console.log('Successfully authenticated with Yahoo IMAP using XOAUTH2!');
  } catch {
    console.log(imap.lastErrorText);
  }

  // Get the list of mailboxes.
  const refName = '';
  const wildcardedMailbox = '*';
  const subscribed = false;

  const mboxes = new Mailboxes();
  try {
    await imap.mbxListAsync(subscribed, refName, wildcardedMailbox, mboxes);
  } catch {
    console.log(imap.lastErrorText);
    return;
  }

  let i = 0;
  while (i < mboxes.count) {
    console.log(mboxes.getName(i));
    i++;
  }

  // Sample output looks like this:

  // Archive
  // Bulk Mail
  // Draft
  // Inbox
  // Inbox/emailsWithAttach
  // Inbox/test
  // Sent
  // Trash

  // Examine the session log
  console.log(imap.sessionLog);

  // Sample session log

  // ----INFO----
  // Connecting to IMAP server at imap.mail.yahoo.com:993
  // ----IMAP RESPONSE----
  // * OK [CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN AUTH=XOAUTH2 AUTH=OAUTHBEARER ID MOVE NAMESPACE XYMHIGHESTMODSEQ UIDPLUS LITERAL+ CHILDREN X-MSG-EXT OBJECTID] IMAP4rev1 Hello
  // ----IMAP REQUEST----
  // aaab AUTHENTICATE XOAUTH2 
  // ----IMAP RESPONSE----
  // aaab OK AUTHENTICATE completed
  // ----IMAP REQUEST----
  // aaac LIST "" "*"
  // ----IMAP RESPONSE----
  // * LIST (\Archive \HasNoChildren) "/" "Archive"
  // * LIST (\Junk \HasNoChildren) "/" "Bulk Mail"
  // * LIST (\Drafts \HasNoChildren) "/" "Draft"
  // * LIST (\HasChildren) "/" "Inbox"
  // * LIST (\HasNoChildren) "/" "Inbox/emailsWithAttach"
  // * LIST (\HasNoChildren) "/" "Inbox/test"
  // * LIST (\Sent \HasNoChildren) "/" "Sent"
  // * LIST (\Trash \HasNoChildren) "/" "Trash"
  // aaac OK LIST completed

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