Skip to main content

Essentials

IMAPClient is an easy-to-use, Pythonic and complete IMAP client library.

Supported Python versions

3.8 - 3.14

License

New BSD

Project home

https://github.com/mjs/imapclient/

PyPI

https://pypi.python.org/pypi/IMAPClient

Documentation

https://imapclient.readthedocs.io/

Discussions

https://github.com/mjs/imapclient/discussions

Test Status

master branch

Features

  • Arguments and return values are natural Python types.

  • IMAP server responses are fully parsed and readily usable.

  • IMAP unique message IDs (UIDs) are handled transparently. There is no need to call different methods to use UIDs.

  • Escaping for internationalised mailbox names is transparently handled. Unicode mailbox names may be passed as input wherever a folder name is accepted.

  • Time zones are transparently handled including when the server and client are in different zones.

  • Convenience methods are provided for commonly used functionality.

  • Exceptions are raised when errors occur.

Example

from imapclient import IMAPClient

# context manager ensures the session is cleaned up
with IMAPClient(host="imap.host.org") as client:
    client.login('someone', 'secret')
    client.select_folder('INBOX')

    # search criteria are passed in a straightforward way
    # (nesting is supported)
    messages = client.search(['NOT', 'DELETED'])

    # fetch selectors are passed as a simple list of strings.
    response = client.fetch(messages, ['FLAGS', 'RFC822.SIZE'])

    # `response` is keyed by message id and contains parsed,
    # converted response items.
    for message_id, data in response.items():
        print('{id}: {size} bytes, flags={flags}'.format(
            id=message_id,
            size=data[b'RFC822.SIZE'],
            flags=data[b'FLAGS']))

Why IMAPClient?

You may ask: “why create another IMAP client library for Python? Doesn’t the Python standard library already have imaplib?”.

The problem with imaplib is that it’s very low-level. It expects string values where lists or tuples would be more appropriate and returns server responses almost unparsed. As IMAP server responses can be quite complex this means everyone using imaplib ends up writing their own fragile parsing routines.

Also, imaplib doesn’t make good use of exceptions. This means you need to check the return value of each call to imaplib to see if what you just did was successful.

IMAPClient actually uses imaplib internally. This may change at some point in the future.

Installing IMAPClient

IMAPClient is listed on PyPI and can be installed with uv:

uv add imapclient

More installation methods are described in the documentation.

Documentation

IMAPClient’s manual is available at http://imapclient.readthedocs.io/. Release notes can be found at http://imapclient.readthedocs.io/#release-history.

See the examples directory in the root of project source for examples of how to use IMAPClient.

Current Status

You should feel confident using IMAPClient for production purposes.

In order to clearly communicate version compatibility, IMAPClient will strictly adhere to the Semantic Versioning scheme from version 1.0 onwards.

The project’s home page is https://github.com/mjs/imapclient/ (this currently redirects to the IMAPClient Github site). Details about upcoming versions and planned features/fixes can be found in the issue tracker on Github. The maintainers also blog about IMAPClient news. Those articles can be found here.

Discussions

Github Discussions can be used to ask questions, propose changes or praise the project maintainers :)

Working on IMAPClient

The contributing documentation contains information for those interested in improving IMAPClient.

IMAP Servers

IMAPClient is heavily tested against Dovecot, Gmail, Fastmail.fm (who use a modified Cyrus implementation), Office365 and Yahoo. Access to accounts on other IMAP servers/services for testing would be greatly appreciated.

Interactive Console

This script connects an IMAPClient instance using the command line args given and starts an interactive session. This is useful for exploring the IMAPClient API and testing things out, avoiding the steps required to set up an IMAPClient instance.

The IPython shell is used if it is installed. Otherwise the code.interact() function from the standard library is used.

The interactive console functionality can be accessed by running the imapclient-interact script that is installed alongside IMAPClient, or by invoking the interact module like this:

uv run python -m imapclient.interact ...

“Live” Tests

IMAPClient includes a series of live, functional tests which exercise it against a live IMAP account. These are useful for ensuring compatibility with a given IMAP server implementation.

The livetest functionality is run using the imapclient-livetest script that is installed alongside IMAPClient:

uv run imapclient-livetest <livetest.ini> [ optional unittest arguments ]

The configuration file format is described in the main documentation.

WARNING: The operations used by livetest are destructive and could cause unintended loss of data. That said, as of version 0.9, livetest limits its activity to a folder it creates and subfolders of that folder. It should be safe to use with any IMAP account but please don’t run livetest against a truly important IMAP account.

Please include the output of imapclient-livetest with an issue if it fails to run successfully against a particular IMAP server. Reports of successful runs are also welcome. Please include the type and version of the IMAP server, if known.

Metadata

Release files for IMAPClient 4.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for IMAPClient 4.2.0
File Size Uploaded Provenance Actions
imapclient-4.2.0.tar.gz 72.5 kB Without provenance Details for imapclient-4.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for IMAPClient 4.2.0
File Interpreter ABI Platform Actions
imapclient-4.2.0-py3-none-any.whl Python 3 none any Details for imapclient-4.2.0-py3-none-any.whl

Total release size: 128.9 kB

Release files / imapclient-4.2.0.tar.gz

Download URL imapclient-4.2.0.tar.gz
Size 72.5 kB
Tags Source
SHA-256 checksum
How to use checksums
777102ced48ab22e3fc372982bb5bed1497c4cc438864d6ec1c9f327ab5f3b3a
BLAKE2b-256 checksum
How to use checksums
225d16a67e0e40549d544b87bed63399906195bcfe5664b5a5384c13ad1ce64e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.8 {"installer":{"name":"uv","version":"0.13.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / imapclient-4.2.0-py3-none-any.whl

Download URL imapclient-4.2.0-py3-none-any.whl
Size 56.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
329593a186e55e0601766dd0c8fc7e2edc0be76bd95479c84bd624624c4dcec5
BLAKE2b-256 checksum
How to use checksums
1bfc930798e5519b49102c1407017b9edb65dcd59a1b293a49099eba2ed9a062
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.8 {"installer":{"name":"uv","version":"0.13.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for IMAPClient 4.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

4.2.0 This release

2 release files No provenance

0.10.1

0.10

0.9.2

0.9.1

0.9

0.8.1

0.8

0.7

0.6.2

0.6.1

0.6

0.5.2

0.5.1

0.5

0.4

0.3

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page