def search(keys, charset = nil)
      return search_internal("SEARCH", keys, charset)
    end
Sends a SEARCH command to search the mailbox for messages that
match the given searching criteria, and returns message sequence
numbers.  +keys+ can either be a string holding the entire
search string, or a single-dimension array of search keywords and
arguments.  The following are some common search criteria;
see [IMAP] section 6.4.4 for a full list.

<message set>:: a set of message sequence numbers.  ',' indicates
an interval, ':' indicates a range.  For instance,
'2,10:12,15' means "2,10,11,12,15".

BEFORE <date>:: messages with an internal date strictly before
<date>.  The date argument has a format similar
to 8-Aug-2002.

BODY <string>:: messages that contain <string> within their body.

CC <string>:: messages containing <string> in their CC field.

FROM <string>:: messages that contain <string> in their FROM field.

NEW:: messages with the \Recent, but not the \Seen, flag set.

NOT <search-key>:: negate the following search key.

OR <search-key> <search-key>:: "or" two search keys together.

ON <date>:: messages with an internal date exactly equal to <date>,
which has a format similar to 8-Aug-2002.

SINCE <date>:: messages with an internal date on or after <date>.

SUBJECT <string>:: messages with <string> in their subject.

TO <string>:: messages with <string> in their TO field.

For example:

p imap.search(["SUBJECT", "hello", "NOT", "NEW"])
#=> [1, 6, 7, 8]