• Stars
    star
    115
  • Rank 296,371 (Top 6 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created about 7 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Tokio-based IMAP implementation

imap-proto and tokio-imap

Build status Join the chat at https://gitter.im/djc/tokio-imap MIT license Apache License 2.0

All feedback welcome. Feel free to file bugs, requests for documentation and any other feedback to the issue tracker or tweet me.

tokio-imap and imap-proto were created by and are maintained by Dirkjan Ochtman. If you are in a position to support ongoing maintenance and further development or use it in a for-profit context, please consider supporting my open source work on Patreon.

tokio-imap: futures-based IMAP client

crates.io, downloads crates.io, latest release API docs, latest release

A Tokio stack-based, fully asynchronous IMAP library, with strong focus on following the relevant specs, mainly IMAP4rev1, but with limited support for the Conditional STORE extension. The type system is used to help enforce correctness where possible. So far, there is only client code and lots of infrastructure that supposedly could be shared -- no server yet. (If you want a tokio-based server, look at IMAPServer.)

Feature highlights

  • Fully asynchronous by using tokio-core and tokio-io
  • Uses the type system to help enforce correct operation according to spec
  • nom-based parser (in imap-proto), so far only used for server response messages

Limitations

  • Alpha-level implementation -- no tests yet, limited protocol coverage
  • Server is totally unimplemented at this stage

How to get started

Have a look at the mailsync crate for example usage.

imap-proto: IMAP types and protocol parser

crates.io, downloads crates.io, latest release API docs, latest release

imap-proto is a low-level IMAP protocol support crate, using the type system to provide a safe API. It was extracted from tokio-imap into a separate crate so that different protocol implementations can share it as common infrastructure (as proposed by rust-imap contributors). The code tries to closely follow the IMAP4rev1 RFC, plus extensions.

Protocol support is implemented in three parts:

  • Types that attempt to closely reflect specification requirements
  • A parser implementation to help consume protocol messages
  • Builder types to help produce protocol messages

Progress

  • Client
    • Parser: many common server responses implemented
    • Types: most common types implemented
    • Message builder: most common commands implemented
  • Server
    • Parser: not started
    • Types: not started
    • Message builder: not started

More Repositories

1

askama

Type-safe, compiled Jinja-like templates for Rust
Rust
2,946
star
2

bb8

Full-featured async (tokio-based) postgres connection pool (like r2d2)
Rust
647
star
3

couchdb-python

Python library for working with CouchDB
Python
200
star
4

runa

A Python-like systems programming language
Python
84
star
5

rustc-version-rs

Rust
58
star
6

gcp_auth

Minimal authentication library for Google Cloud Platform (GCP)
Rust
57
star
7

mendes

Rust web toolkit for impatient perfectionists
Rust
41
star
8

topfew-rs

Rust implementation of Tim Bray's topfew tool
Rust
37
star
9

awmy

arewemeetingyet.com: help communicate meeting times to timezone-challenged participants
Python
34
star
10

no-close-buttons

Firefox addon to remove close buttons from tabs
Makefile
18
star
11

persona-totp

A minimal Python implementation of a Persona IdP
Python
15
star
12

fixlib

Pythonic library for dealing with the FIX protocol
Python
14
star
13

rnc2rng

RELAX NG Compact to regular syntax conversion library
Python
14
star
14

mailsync

Rust
12
star
15

imap-proto

IMAP protocol parser and datastructures in Rust
12
star
16

abna

Python library to automatically retrieve mutations from ABN Amro
Python
10
star
17

galatna

Create SVG-based maps from Google Latitude location history
Python
9
star
18

appdirs-rs

Rust crate for determining platform-specific application directories
Rust
9
star
19

talks

Materials for presentations I've given
HTML
7
star
20

s3-fifo

Rust
6
star
21

corda-rpc

Rust libraries for doing Corda RPC
Rust
6
star
22

sign-cert-remote

Rust
5
star
23

pmf

Script to submit RSS/Atom feed content to Reddit
Python
4
star
24

mbox-reader

Minimal mmap-backed mbox format reader in Rust
Rust
4
star
25

jasinja

Jasinja is a compiler for Jinja templates targeting Javascript
Python
4
star
26

candotti

Oxidizing Thread & Matter
Rust
3
star
27

rst-parser

reStructuredText parser and writers in Rust
Rust
3
star
28

pyrtls

rustls-based TLS for Python
Rust
3
star
29

awijan

Tool to help create release notes
Rust
3
star
30

lecertman

Let's Encrypt certificate manager -- manage a group of certificates, ensure they are renewed on time
Python
3
star
31

cs143-python

Python parser for CS143 AST serialization
Python
2
star
32

cryptopals

Rust
2
star
33

edit-chunks

Split out chunks of a large file for editing, then put them back together again
Rust
2
star
34

email-parser

Lazy liberal email (RFC 5322) parser in Rust
Rust
1
star
35

nested-input

Rust
1
star
36

djc-overlay

My experimental Gentoo overlay
1
star
37

kv

Rust
1
star
38

lang-repo-analysis

Code for https://dirkjan.ochtman.nl/writing/2017/05/19/rust-is-a-big-tent.html
Python
1
star
39

clang-format-find

Find the clang-format configuration that best fits your codebase
Python
1
star
40

wsgrep

Proof of concept grep (Rust Utrecht workshop 2018-05-03)
Rust
1
star
41

tz-tmp

Rust
1
star
42

modern-lang-analysis

Code and data for my blog post "Rust is a big tent"
Python
1
star