https://github.com/meli/meli
🐝 terminal mail client, mirror of https://git.meli-email.org/meli/meli.git https://crates.io/crates/meli
https://github.com/meli/meli
client email imap imap-client jmap mail mail-client mbox meli mua nntp nntp-client notmuch rust terminal tui
Last synced: about 1 month ago
JSON representation
🐝 terminal mail client, mirror of https://git.meli-email.org/meli/meli.git https://crates.io/crates/meli
- Host: GitHub
- URL: https://github.com/meli/meli
- Owner: meli
- License: gpl-3.0
- Created: 2019-06-10T16:37:01.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2025-02-15T13:01:35.000Z (2 months ago)
- Last Synced: 2025-02-15T14:18:22.603Z (2 months ago)
- Topics: client, email, imap, imap-client, jmap, mail, mail-client, mbox, meli, mua, nntp, nntp-client, notmuch, rust, terminal, tui
- Language: Rust
- Homepage: https://meli-email.org
- Size: 11.1 MB
- Stars: 704
- Watchers: 14
- Forks: 24
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: COPYING
- Codemeta: codemeta.json
Awesome Lists containing this project
- awesome-rust - meli/meli - 🐝 terminal mail client (Libraries / Email)
- fucking-awesome-rust - meli/meli - 🐝 terminal mail client (Libraries / Email)
- fucking-awesome-rust - meli/meli - 🐝 terminal mail client (Libraries / Email)
- awesome-rust - meli/meli - 🐝 terminal mail client (Libraries / Email)
README
# meli   [](https://github.com/meli/meli/blob/master/COPYING) [](https://crates.io/crates/meli) [](ircs://irc.oftc.net:6697/%23meli)
**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](https://meli-email.org/wasm2.html "online interactive web demo") powered by WebAssembly!
* Say hello on `#meli` on OFTC IRC, or,
* [`#meli:matrix.org`](https://matrix.to/#/#meli:matrix.org) Matrix bridge (if operational)
* [Mailing lists](https://lists.meli-email.org/)
* Main repository Report bugs and/or feature requests in [meli's issue tracker](https://git.meli-email.org/meli/meli/issues "meli gitea issue tracker")Official git mirrors
-
-
-
-
**Table of contents**:
- [Install](#install)
- [Build](#build)
- [Cargo Compile-time Features](#cargo-compile-time-features)
- [Quick start](#quick-start)
- [Supported E-mail backends](#supported-e-mail-backends)
- [E-mail submission backends](#e-mail-submission-backends)
- [Non-exhaustive list of features](#non-exhaustive-list-of-features)
- [HTML Rendering](#html-rendering)
- [Documentation](#documentation)## Install
- Crates.io with `cargo` on all supported systems and architectures

```sh
cargo install meli
```
Install latest development snapshot from git repository:
```sh
cargo install --git https://git.meli-email.org/meli/meli.git meli
```
- Official Debian (and Debian derivatives) packages  
```sh
apt install meli
```
- AUR (archlinux)
- OpenSUSE
- Alpine Linux
```sh
apk install meli
```
- NetBSD with pkgsrc
- OpenBSD ports
- macOS with
- Homebrew
```sh
brew install meli
```
- MacPorts
```sh
port install meli
```
- Nix with Nixpkgs
- [Pre-built debian package, static binaries](https://github.com/meli/meli/releases/ "github releases for meli") foramd64
,arm64
architectures## Build
Run `make` or `cargo build --release --bin meli`.
See `make help` output for information on how to use the `Makefile`.
For detailed building instructions, see [`BUILD.md`](./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:
```toml
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
```sh
# 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)`](./meli/docs/meli.7).
See also the [Quickstart tutorial](https://meli-email.org/documentation.html#quick-start) 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](https://meli-email.org/documentation.html "meli documentation").
`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.:
```sh
MELI_CONFIG=./test_config cargo run
```See [`meli(7)`](./meli/docs/meli.7) for an extensive tutorial and [`meli.conf(5)`](./meli/docs/meli.conf.5) for all configuration values.
| Main view | Compact main view | Compose with embed terminal editor |
|-----------|-------------------|------------------------------------|
|  |  |  |### 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](https://github.com/tats/w3m) by default.
You can use the `pager.html_filter` setting to override this (for more details you can consult [`meli.conf(5)`](./meli/docs/meli.conf.5)).## Documentation
See a comprehensive tour of `meli` in the manual page [`meli(7)`](./meli/docs/meli.7).
See also the [Quickstart tutorial](https://meli-email.org/documentation.html#quick-start) 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](https://meli-email.org/documentation.html "meli documentation").`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:
```sh
MELI_CONFIG=./test_config meli
```or
```sh
meli -c ./test_config
```