There are various email synchronization programs like offlineimap or mbsync, which have some inherent limitations:

  • mbsync does not support IMAP IDLE
  • offlineimap does not yet support Python 3, proper IDLE and threading support would need a complete rewrite

Features

  • support only IMAP, no POP3
  • IMAP IDLE support is a must, especially:
    • reconnection of dropped IDLE connections
    • support IDLE for all IMAP folders
  • be able to synchronize IMAP <-> Maildir at first, IMAP <-> IMAP would be nice to have
  • bullet-proof cryptography, especially with respect to certificate validation and resistance to downgrade attacks (preferably make the TLS version configurable)
  • use inotify API to support immediate synchronization back to the server if a message changes locally
  • as simple configuration as possible with good defaults

nice to have:

  • incorporate an API for external tagging tools like notmuch to synchronize tags if the remote supports it
  • GMail support

Implementation

Preferably in Rust, using the imap crate as the core.

Scope

Try to create a MVP, especially flesh out proper testing and learn enough about the problem.

Looking for hackers with the skills:

imap email rust

This project is part of:

Hack Week 18

Activity

  • over 5 years ago: okurz liked this project.
  • over 5 years ago: aspiers liked this project.
  • over 5 years ago: yfjiang liked this project.
  • over 5 years ago: jbaier_cz liked this project.
  • over 5 years ago: mbrugger liked this project.
  • over 5 years ago: dancermak started this project.
  • over 5 years ago: dancermak added keyword "imap" to this project.
  • over 5 years ago: dancermak added keyword "email" to this project.
  • over 5 years ago: dancermak added keyword "rust" to this project.
  • over 5 years ago: dancermak originated this project.

  • Comments

    • cyphar
      over 5 years ago by cyphar | Reply

      Just one word of warning (I ran into this last time I tried to write an IMAP client in Rust) -- the IMAP crates all appear to be either slightly or completely broken. There are several but they're all forks of one another and the "best looking" one requires tokio.

    Similar Projects

    Better diff'ing experience by MSirringhaus

    Description

    For diff-ing directories, I usu...


    Write an url shortener in Rust (And learn in the way) by szarate

    So I have 469.icu :), it's currently doing noth...


    Implement a CLI tool for Trento - trentoctl by nkopliku

    Description

    Implement a trentoctl CLI for...


    SMB3 Server written entirely in Rust by dmulder

    Description

    Given the number of bugs freque...


    Kanidm: A safe and modern IDM system by firstyear

    Kanidm is an IDM system written in Rust for mod...