Querying Mails

There are three ways to query Red Box:

  • Using keyword arguments

  • Using query language

  • Using raw IMAP language

All of these methods use the method search but the arguments are different.

Keyword arguments are converted to the query language and the query language is converted to raw IMAP language. Here is an illustration of these options:

from redbox.query import SUBJECT, UNSEEN

# Keywords
inbox.search(subject="example 2", unseen=True)

# Query language
inbox.search(SUBJECT("example 2") & UNSEEN)

# Raw IMAP
inbox.search('(ALL (SUBJECT "example 2") (UNSEEN))')

These all result to the same query.

Using Keyword Arguments

Keyword arguments are converted to the query language by turning their keys to upper case. Also, because from is a Python keyword, the trailing underscores are removed. For example,

Those fields that don’t take arguments, boolean value should be passed. If the field do take an argument, the argument should be passed as the value.

Here are some examples:

# Get all unread emails

# Get all emails from specific email

You can also pass multiple keyword arguments. These are combined with AND operator.

inbox.search(subject="Could we talk?", to="brother@example.com")

Read more about the fields from query fields.

Using Query Language

The query language is a set of instances that can be combined. Some of the

Here are some examples:

from redbox.query import SEEN, FROM, HEADER


There are also logical operations.

from redbox.query import TO, TEXT, FROM

# AND operation
inbox.search(TO('mother@example.com') & TEXT('I miss you.'))

# OR operation
inbox.search(FROM('mother@example.com') | FROM('father@example.com'))

# NOT operation

Read more about the fields from query fields.

Using Raw IMAP Language

To use raw IMAP search language, just pass the query in string:

inbox.search('(ALL (SUBJECT "I'm sorry") (UNSEEN))')

Read more about the keywords from RFC3501.