searchMessages method

Future<SearchImapResult> searchMessages({
  1. String searchCriteria = 'UNSEEN',
  2. List<ReturnOption>? returnOptions,
  3. Duration? responseTimeout,
})

Searches messages by the given searchCriteria like 'UNSEEN' or 'RECENT' or 'FROM sender@domain.com'.

When augmented with zero or more returnOptions, requests an extended search. Note that the IMAP server needs to support ESEARCH capability for this. This request times out after the specified responseTimeout

Implementation

Future<SearchImapResult> searchMessages({
  String searchCriteria = 'UNSEEN',
  List<ReturnOption>? returnOptions,
  Duration? responseTimeout,
}) {
  final parser =
      SearchParser(isUidSearch: false, isExtended: returnOptions != null);
  final buffer = StringBuffer('SEARCH ');
  if (returnOptions != null) {
    buffer
      ..write('RETURN (')
      ..write(returnOptions.join(' '))
      ..write(') ');
  }
  buffer.write(searchCriteria);
  final cmdText = buffer.toString();
  buffer.clear();
  final searchLines = cmdText.split('\n');
  final cmd = searchLines.length == 1
      ? Command(
          cmdText,
          writeTimeout: defaultWriteTimeout,
          responseTimeout: responseTimeout,
        )
      : Command.withContinuation(
          searchLines,
          writeTimeout: defaultWriteTimeout,
          responseTimeout: responseTimeout,
        );

  return sendCommand<SearchImapResult>(cmd, parser);
}