I/O IMAP [](https://docs.rs/io-imap/latest/io_imap) [](https://matrix.to/#/#pimalaya:matrix.org) [](https://fosstodon.org/@pimalaya) [](https://pimalaya.org/sponsor/)
August 22, 2026 · View on GitHub
IMAP client library for Rust
This library is composed of 3 feature-gated layers:
- Low-level I/O-free coroutines: no_std-compatible state machines containing the whole IMAP logic, usable anywhere
- Mid-level light client: a standard, blocking client wrapping a stream you opened yourself
- High-level full client: the light client plus TCP connections and TLS negotiations handled for you
Table of contents
Features
- I/O-free coroutines: state machines with no socket, no async runtime and no forced I/O model; run them from any blocking, async or test harness.
- Complete IMAP4rev1 command set: manage mailboxes, messages, flags and searches over a full standard session lifecycle.
- Push notifications: keep a mailbox open with IDLE and receive live change events, refreshed periodically to survive middle-boxes.
- Incremental resync: pull only what changed since the last sync with CONDSTORE and QRESYNC, powering the built-in mailbox watcher.
- Server-side sorting and threading: SORT and THREAD support, with a client-side sorting fallback for servers lacking the extension.
- Streaming upload and download: message bodies flow straight between the socket and your storage, never held in memory whole.
- SASL authentication: ANONYMOUS, LOGIN, PLAIN, XOAUTH2, OAUTHBEARER and SCRAM-SHA-256 mechanisms, with optional client identification for providers requiring it.
- Light client: a standard, blocking client exposing one method per IMAP command over a stream you opened yourself.
- Full client with TLS support:
- Rustls with ring crypto (requires
rustls-ringfeature, enabled by default) - Rustls with aws crypto (requires
rustls-awsfeature) - Native TLS (requires
native-tlsfeature)
- Rustls with ring crypto (requires
Tip
I/O IMAP is written in Rust and uses cargo features to gate backend support. The default feature set is declared in Cargo.toml or on docs.rs.
RFC coverage
| RFC | What is covered |
|---|---|
| 2177 | IDLE: real-time mailbox change notifications pushed by the server |
| 2971 | ID: client and server identification exchange, required by some providers before authentication |
| 3501 | IMAP4rev1: greeting, capability, login and logout, mailbox listing, creation, renaming and subscription, selection and examination, fetch, store, search, copy, append, expunge, noop and STARTTLS |
| 3691 | UNSELECT: discard the selected mailbox without expunging deleted messages |
| 4315 | UIDPLUS: APPENDUID and COPYUID response codes carrying the UIDs assigned by append, copy and move |
| 4959 | SASL-IR: initial client response inline with the authentication command, saving a round-trip |
| 5161 | ENABLE: explicit activation of server capabilities |
| 5256 | SORT and THREAD: server-side message sorting and threading, with a client-side sorting fallback for servers lacking the extension |
| 6851 | MOVE: atomic message move between mailboxes |
| 7162 | CONDSTORE and QRESYNC: incremental resync through mod-sequences and vanished message reporting on select, examine and fetch |
| 7628 | OAUTHBEARER: OAuth 2.0 bearer token authentication, next to the pre-standard XOAUTH2 |
| 7677 | SCRAM-SHA-256: salted challenge-response authentication |
Usage
See documentation at docs.rs.
Examples
See complete examples at ./examples.
Have also a look at real-world projects built on top of this library:
- Himalaya CLI: CLI to manage emails
- Himalaya TUI: TUI to manage emails
- Neverest: CLI to synchronize emails
- Mirador: CLI to watch mailbox changes and fire hooks on every event
- Sirup: CLI to spawn pre-authenticated IMAP/SMTP sessions and expose them via Unix sockets
License
This project is licensed under either of:
Social
- Chat on Matrix
- News on Mastodon or RSS
- Mail at pimalaya.org@posteo.net
Sponsoring
Special thanks to the NLnet foundation and the European Commission that have been financially supporting the project for years:
- 2022 → 2023: NGI Assure
- 2023 → 2024: NGI Zero Entrust
- 2024 → 2026: NGI Zero Core
- 2026 → 2027: NGI Zero Commons Fund
This program is part of Pimalaya, free software funded entirely by grants and donations. If you find it useful, consider sponsoring its development:
