22 releases

new 0.8.10 Dec 6, 2024
0.8.9 Nov 27, 2024
0.8.7 Jul 30, 2024
0.8.5-rc.3 Dec 11, 2023
0.0.0 Jul 8, 2019

#53 in Email

Download history 13/week @ 2024-08-18 13/week @ 2024-08-25 9/week @ 2024-09-01 43/week @ 2024-09-08 25/week @ 2024-09-15 76/week @ 2024-09-22 39/week @ 2024-09-29 17/week @ 2024-10-06 16/week @ 2024-10-13 14/week @ 2024-10-20 3/week @ 2024-10-27 15/week @ 2024-11-03 11/week @ 2024-11-10 168/week @ 2024-11-17 167/week @ 2024-11-24 182/week @ 2024-12-01

528 downloads per month

EUPL-1.2 OR GPL-3.0-or-later

5MB
115K SLoC

meli Established, created in 2017 Minimum Supported Rust Version GitHub license Crates.io IRC channel

BSD/Linux/macos terminal email client with support for multiple accounts and Maildir / mbox / notmuch / IMAP / JMAP / NNTP (Usenet).

Try an old, outdated but online and interactive web demo powered by WebAssembly!

Table of contents:

Install

Packaging status table by repology.org

Build

Run make or cargo build --release --bin meli.

For detailed building instructions, see BUILD.md

Cargo Compile-time Features

meli supports opting in and out of features at compile time with cargo features.

The contents of the default feature are:

default = ["sqlite3", "notmuch", "smtp", "dbus-notifications", "gpgme", "cli-docs", "jmap", "static"]

A list of all the features and a description for each follows:

Feature flag Dependencies Notes
notmuch maildir feature Provides the notmuch backend
jmap http feature, url crate with serde feature Provides the JMAP backend
smtp tls feature Integrated async SMTP client
sqlite3 rusqlite crate with bundled-full feature Used in caches
sqlite3-static rusqlite crate with bundled-full feature Same as sqlite3 feature but provided for consistency and in case sqlite3 feature stops bundling libsqlite3 statically in the future.
smtp-trace smtp feature Connection trace logs on the trace logging level
gpgme GPG use by dynamically loading libgpgme.so
tls-static native-tls crate with vendored feature Links with OpenSSL statically where it's used
http-static isahc crate with static-curl feature Links with curl statically
dbus-notifications notify-rust dependency Uses DBus notifications
dbus-static notify-rust dependency and enableds its d_vendored feature Includes the dbus library statically.
cli-docs flate2 dependency Includes the manpage documentation compiled by either mandoc or man binary to plain text in meli's command line. Embedded documentation can be viewed with the subcommand meli man [PAGE]
libz-static libz-sys dependency and enables its static feature Allows for the transitive dependency libz (from curl) to be linked statically.
static enables tls-static, http-static, sqlite3-static, dbus-static, libz-static features

Quick start

# Create configuration file in ${XDG_CONFIG_HOME}/meli/config.toml:
$ meli create-config
# Edit configuration in ${EDITOR} or ${VISUAL}:
$ meli edit-config
# Optionally, install manual pages if installed via cargo:
$ meli install-man
# Ready to go.
$ meli
# You can read any manual page with the CLI subcommand `man`:
$ meli man meli.7
# See help output for all options and subcommands.
$ meli --help

See a comprehensive tour of meli in the manual page meli(7).

See also the Quickstart tutorial online.

After installing meli, see meli(1), meli.conf(5), meli(7) and meli-themes(5) for documentation. Sample configuration and theme files can be found in the meli/docs/samples/ subdirectory. Examples for configuration file settings can be found in meli.conf.examples(5) Manual pages are also hosted online. meli by default looks for a configuration file in this location: ${XDG_CONFIG_HOME}/meli/config.toml.

You can run meli with arbitrary configuration files by setting the ${MELI_CONFIG} environment variable to their locations, i.e.:

MELI_CONFIG=./test_config cargo run

See meli(7) for an extensive tutorial and meli.conf(5) for all configuration values.

Main view Compact main view Compose with embed terminal editor
Main view screenshot Compact main view screenshot Compose with embed terminal editor screenshot

Supported E-mail backends

Protocol Support
IMAP full
Maildir full
notmuch full[^0]
mbox read-only
JMAP functional
NNTP / Usenet functional

[^0]: there's no support for searching through all email directly, you'd have to create a mailbox with a notmuch query that returns everything and search inside that mailbox.

E-mail submission backends

  • SMTP
  • Pipe to shell script
  • Server-side submission when supported

Non-exhaustive list of features

  • TLS
  • email threading support
  • multithreaded, async operation
  • optionally run your editor of choice inside meli, with an embedded xterm-compatible terminal emulator
  • plain text configuration in TOML
  • ability to open emails in UI tabs and switch to them
  • optional sqlite3 index search
  • override almost any setting per mailbox, per account
  • contact list (+read-only vCard and mutt alias file support)
  • forced UTF-8 (other encodings are read-only)
  • configurable shortcuts
  • theming
  • NO_COLOR support
  • ascii-only drawing characters option
  • view text/html attachments through an html filter command (w3m by default)
  • pipe attachments/mail to stuff
  • use external attachment file picker instead of typing in an attachment's full path
  • GPG signing, encryption, signing + encryption
  • GPG signature verification

HTML Rendering

HTML rendering is achieved using w3m by default. You can use the pager.html_filter setting to override this (for more details you can consult meli.conf(5)).

Documentation

See a comprehensive tour of meli in the manual page meli(7).

See also the Quickstart tutorial online.

After installing meli, see meli(1), meli.conf(5), meli(7) and meli-themes(5) for documentation. Sample configuration and theme files can be found in the meli/docs/samples/ subdirectory. Manual pages are also hosted online.

meli by default looks for a configuration file in this location: ${XDG_CONFIG_HOME}/meli/config.toml

You can run meli with arbitrary configuration files by setting the ${MELI_CONFIG} environment variable to their locations, or use the [-c, --config] argument:

MELI_CONFIG=./test_config meli

or

meli -c ./test_config

Dependencies

~19–58MB
~1M SLoC