| Crates.io | mailledger-imap |
| lib.rs | mailledger-imap |
| version | 0.0.2 |
| created_at | 2026-01-14 14:09:13.94934+00 |
| updated_at | 2026-01-17 17:34:41.315558+00 |
| description | Production-quality IMAP client library implementing RFC 9051 (IMAP4rev2) |
| homepage | https://github.com/mqasimca/mailledger |
| repository | https://github.com/mqasimca/mailledger |
| max_upload_size | |
| id | 2042882 |
| size | 369,192 |
Production-quality IMAP client library implementing RFC 9051 (IMAP4rev2) with fallback support for RFC 3501 (IMAP4rev1).
NotAuthenticated → Authenticated → Selected)use mailledger_imap::{Client, Config, Security, FetchItems};
#[tokio::main]
async fn main() -> mailledger_imap::Result<()> {
// Connect with TLS
let config = Config::new("imap.example.com", Security::Implicit);
let stream = mailledger_imap::connection::connect_tls(&config).await?;
let client = Client::from_stream(stream).await?;
// Authenticate
let mut client = client.login("user@example.com", "password").await?;
// List folders
let folders = client.list("", "*").await?;
for folder in &folders {
println!("Folder: {}", folder.mailbox.as_str());
}
// Select INBOX
let (mut client, status) = client.select("INBOX").await?;
println!("Messages: {}", status.exists);
client.logout().await?;
Ok(())
}
The library uses the type-state pattern to enforce valid IMAP operations at compile time:
┌─────────────────────┐
│ NotAuthenticated │ ─── login() ───→ Authenticated
└─────────────────────┘
│
▼
┌─────────────────────┐
│ Authenticated │ ─── select()/examine() ───→ Selected
└─────────────────────┘
│
▼
┌─────────────────────┐
│ Selected │ ─── close() ───→ Authenticated
└─────────────────────┘
MIT License - see LICENSE for details.