Sample code for 30+ languages & platforms
Dart

Outlook -- Search Messages in a Particular Folder

See more Outlook Examples

Demonstrates search the messages in a particular Outlook mailbox folder.

This uses the OData $filter and $search system query options. See OData System Query Options for general information.

Also see OData URL Conventions for information about $filter, $search and other query options.

This example demonstrates the following searches:

  • Find emails from a particular email address.
  • Find emails where the subject contains a particular word or phrase.
  • Using an "AND" expression.
  • Find emails received in the last 24 hours.
  • Find emails received in October 2016
  • Find unread emails
  • Find emails containing a particular phrase in the body.
  • Free-text search of a keyword or phrase.
  • Free-text search of an email address.
Note: This example requires Chilkat v9.5.0.68 or greater.

This example applies to: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com

Chilkat Dart Downloads

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

void main() {
  var success = false;

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

  final http = CkHttp();

  // Use your previously obtained access token here:
  // See the following examples for getting an access token:
  //    Get Microsoft Graph OAuth2 Access Token (Azure AD v2.0 Endpoint).
  //    Get Microsoft Graph OAuth2 Access Token (Azure AD Endpoint).
  //    Refresh Access Token (Azure AD v2.0 Endpoint).
  //    Refresh Access Token (Azure AD Endpoint).

  http.authToken = 'MICROSOFT_GRAPH_ACCESS_TOKEN';

  final sbResponse = CkStringBuilder();

  // In this example, we'd like to get the messages in the folder "/Inbox",
  // but we must specify the corresponding folder_id.  The best way to do this is to create
  // a local map of folderPaths-to-folderIds.
  // This example does it:  Create Outlook Folder Map)
  final htFolderMap = CkHashtable();
  final sbMap = CkStringBuilder();
  sbMap.loadFile('qa_data/outlook/folderMap.xml', 'utf-8');
  htFolderMap.addFromXmlSb(sbMap);

  // Get the ID for the "/Inbox" folder:
  final String folderId;
  try {
    folderId = htFolderMap.lookupStr('/Inbox');
  } on ChilkatException {
    print('Folder ID not found');
    return;
  }

  success = true;
  final json = CkJsonObject();
  json.emitCompact = false;

  http.setUrlVar('folder_id', folderId);
  http.setUrlVar('select', 'subject,from');

  // -----------------------------------------------------------------------------------------------------
  // Only return emails from "chilkat.support@gmail.com"
  http.setUrlVar('filter', 'from/emailAddress/address eq \'chilkat.support@gmail.com\'');

  // To return the full content of each email, omit the "&select=..." part of the URL.
  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$filter={\$filter}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Only return emails where the subject contains "Amazon"
  http.setUrlVar('filter', 'contains(subject,\'Amazon\')');

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$filter={\$filter}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Only return emails where the subject starts with "this email" and the from address is support@chilkatsoft.com
  // (the startswith function is case insensitive)
  http.setUrlVar('filter', 'startswith(subject,\'this email\') and (from/emailAddress/address eq \'support@chilkatsoft.com\')');

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$filter={\$filter}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Only return emails received within the last 24 hours
  final sbExpression = CkStringBuilder();

  sbExpression.append('receivedDateTime ge ');
  final dt = CkDateTime();
  dt.setFromCurrentSystemTime();
  dt.addDays(-1);
  sbExpression.append(dt.getAsTimestamp(false));

  http.setUrlVar('filter', sbExpression.getAsString());

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$filter={\$filter}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Only return emails received in October 2016
  final dtObj = CkDtObj();
  dtObj.year = 2016;
  dtObj.month = 10;
  dtObj.day = 1;
  dtObj.utc = true;
  dt.setFromDtObj(dtObj);

  sbExpression.clear();
  sbExpression.append('(receivedDateTime ge ');
  sbExpression.append(dt.getAsTimestamp(false));
  sbExpression.append(') and (receivedDateTime lt ');
  dtObj.month = 11;
  dt.setFromDtObj(dtObj);
  sbExpression.append(dt.getAsTimestamp(false));
  sbExpression.append(')');

  // This is the expression we just built:  (receivedDateTime ge 2016-10-01T00:00:00Z) and (receivedDateTime lt 2016-11-01T00:00:00Z)
  print(sbExpression.getAsString());

  http.setUrlVar('filter', sbExpression.getAsString());

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$filter={\$filter}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Return unread emails
  http.setUrlVar('filter', 'isRead eq false');

  // success = http.QuickGetSb("https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}",sbResponse);
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Return emails with a plain-text or HTML body containing the phrase "Outlook 365"
  http.setUrlVar('filter', 'contains(body/content,\'Outlook 365\')');

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$filter={\$filter}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Use the $search query option instead of $filter.
  // $search is a free-text search over whatever fields the server deems appropriate, such as in the subject,
  // body, address fields, etc.

  // Search for the word Amazon
  http.setUrlVar('search', 'Amazon');

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$search={\$search}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());

  // -----------------------------------------------------------------------------------------------------
  // Search for chilkatsoft.com
  // Some chars, such as the "." make it necessary to enclose the search expression in double-quotes.
  http.setUrlVar('search', '"chilkatsoft.com"');

  success = true;
  try {
    http.quickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{\$folder_id}/messages?\$search={\$search}&\$select={\$select}', sbResponse);
  } on ChilkatException {
    success = false;
  }
  if ((!success) && (http.lastStatus == 0)) {
    print(http.lastErrorText);
    return;
  }

  json.loadSb(sbResponse);
  print(json.emit());
}