2020-10-17 12:02:38 +00:00
# meli [![GitHub license](https://img.shields.io/github/license/meli/meli)](https://github.com/meli/meli/blob/master/COPYING) [![Crates.io](https://img.shields.io/crates/v/meli)](https://crates.io/crates/meli)
2020-02-04 18:05:49 +00:00
2023-09-07 09:53:23 +00:00
**BSD/Linux terminal email client with support for multiple accounts and Maildir / mbox / notmuch / IMAP / JMAP / NNTP (usenet).**
2020-02-04 18:05:49 +00:00
2020-10-17 12:02:38 +00:00
Community links:
2021-06-13 08:27:33 +00:00
[mailing lists ](https://lists.meli.delivery/ ) | `#meli` on OFTC IRC | Report bugs and/or feature requests in [meli's issue tracker ](https://git.meli.delivery/meli/meli/issues "meli gitea issue tracker" )
2020-02-04 18:05:49 +00:00
2023-09-07 09:53:23 +00:00
Main repository: < https: / / git . meli . delivery / meli / meli >
Official mirrors: < https: / / github . com / meli / meli >
2020-10-17 12:02:38 +00:00
| | | |
:---:|:---:|:---:
2023-07-16 17:06:44 +00:00
![Main view screenshot ](./meli/docs/screenshots/main.webp "mail meli view screenshot" ) | ![Compact main view screenshot ](./meli/docs/screenshots/compact.webp "compact main view screenshot" ) | ![Compose with embed terminal editor screenshot ](./meli/docs/screenshots/compose.webp "composing view screenshot" )
2020-10-17 12:02:38 +00:00
Main view | Compact main view | Compose with embed terminal editor
2020-02-04 18:05:49 +00:00
2023-09-07 09:53:23 +00:00
## Description
meli aims for configurability, extensibility with sane defaults, and modern
practices. It is a mail client for both casual and power users of the terminal.
A variety of email workflows and software stacks should be usable with meli.
Integrate e-mail storage, sync, tagging system, SMTP client, contact management
and editor of your choice to replace the defaults.
### Supported E-mail backends
| Protocol | Support |
|:------------:|:----------------|
| IMAP | full |
| Maildir | full |
| notmuch | full* |
| mbox | read-only |
| JMAP | functional |
| NNTP / Usenet| functional |
* 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
### 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
2020-12-07 05:50:57 +00:00
2020-10-17 12:02:38 +00:00
## Install
- Try an [online interactive web demo ](https://meli.delivery/wasm2.html "online interactive web demo" ) powered by WebAssembly
2023-09-07 09:53:23 +00:00
- Pre-built binaries for [pkgsrc ](https://pkgsrc.se/mail/meli ) and [openbsd ports ](https://openports.pl/path/mail/meli ).
2023-08-14 18:35:09 +00:00
- `cargo install --git https://git.meli.delivery/meli/meli.git meli`
2020-10-17 12:02:38 +00:00
- [Download and install pre-built debian package, static linux binary ](https://github.com/meli/meli/releases/ "github releases for meli" ), or
2023-09-07 09:53:23 +00:00
- Install with [Nix ](https://search.nixos.org/packages?show=meli&query=meli&from=0&size=30&sort=relevance&channel=unstable#disabled "nixos package search results for 'meli'" ).
2020-10-17 12:02:38 +00:00
## Documentation
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
See a comprehensive tour of `meli` in the manual page [`meli(7)` ](./meli/docs/meli.7 ).
2020-02-04 18:05:49 +00:00
2022-09-06 18:41:26 +00:00
See also the [Quickstart tutorial ](https://meli.delivery/documentation.html#quick-start ) online.
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
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.delivery/documentation.html "meli documentation" ).
2022-09-06 18:41:26 +00:00
`meli` by default looks for a configuration file in this location: `$XDG_CONFIG_HOME/meli/config.toml`
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
You can run meli with arbitrary configuration files by setting the `$MELI_CONFIG` environment variable to their locations, i.e.:
2020-02-04 18:05:49 +00:00
```sh
2020-10-17 12:02:38 +00:00
MELI_CONFIG=./test_config cargo run
2020-02-04 18:05:49 +00:00
```
2020-10-17 12:02:38 +00:00
## Build
For a quick start, build and install locally:
2020-02-04 18:05:49 +00:00
```sh
2020-10-17 12:02:38 +00:00
PREFIX=~/.local make install
2020-02-04 18:05:49 +00:00
```
2023-07-16 17:06:44 +00:00
Available subcommands for `make` are listed with `make help` .
The Makefile *should* be POSIX portable and not require a specific `make` version.
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
`meli` requires rust 1.65 and rust's package manager, Cargo.
Information on how to get it on your system can be found here: < https: / / doc . rust-lang . org / cargo / getting-started / installation . html >
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
With Cargo available, the project can be built with `make` and the resulting binary will then be found under `target/release/meli` .
Run `make install` to install the binary and man pages.
This requires root, so I suggest you override the default paths and install it in your `$HOME` : `make PREFIX=$HOME/.local install` .
2020-02-04 18:05:49 +00:00
2022-09-06 18:41:26 +00:00
You can build and run `meli` with one command: `cargo run --release` .
2020-02-04 18:05:49 +00:00
2020-10-17 12:02:38 +00:00
### Build features
2020-06-21 20:53:55 +00:00
Some functionality is held behind "feature gates", or compile-time flags. The following list explains each feature's purpose:
2020-10-17 12:02:38 +00:00
- `gpgme` enables GPG support via `libgpgme` (on by default)
- `dbus-notifications` enables showing notifications using `dbus` (on by default)
- `notmuch` provides support for using a notmuch database as a mail backend (on by default)
2023-09-07 09:53:23 +00:00
- `jmap` provides support for connecting to a jmap server and use it as a mail backend (on by default)
2020-10-17 12:02:38 +00:00
- `sqlite3` provides support for builting fast search indexes in local sqlite3 databases (on by default)
2023-09-07 09:53:23 +00:00
- `cli-docs` 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]` (on by default).
2020-06-21 20:53:55 +00:00
2020-10-17 12:02:38 +00:00
### Build Debian package (*deb*)
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
Building with Debian's packaged cargo might require the installation of these two packages: `librust-openssl-sys-dev librust-libdbus-sys-dev`
2020-02-04 18:05:49 +00:00
A `*.deb` package can be built with `make deb-dist`
2020-10-17 12:02:38 +00:00
### Using notmuch
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
To use the optional notmuch backend feature, you must have `libnotmuch5` installed in your system.
In Debian-like systems, install the `libnotmuch5` packages.
`meli` detects the library's presence on runtime.
2020-02-04 18:05:49 +00:00
2020-10-17 12:02:38 +00:00
### Using GPG
2023-07-16 17:06:44 +00:00
To use the optional gpg feature, you must have `libgpgme` installed in your system.
In Debian-like systems, install the `libgpgme11` package.
`meli` detects the library's presence on runtime.
2020-10-17 12:02:38 +00:00
2023-04-30 16:05:01 +00:00
### HTML Rendering
HTML rendering is achieved using [w3m ](https://github.com/tats/w3m ) by default.
2023-07-16 17:06:44 +00:00
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 )).
2023-04-30 16:05:01 +00:00
2020-02-04 18:05:49 +00:00
# Development
Development builds can be built and/or run with
```
cargo build
cargo run
```
2023-07-16 17:06:44 +00:00
There is a debug/tracing log feature that can be enabled by using the flag `--feature debug-tracing` after uncommenting the features in `Cargo.toml` .
The logs are printed in stderr when the env var `MELI_DEBUG_STDERR` is defined, thus you can run `meli` with a redirection (i.e `2> log` ).
2020-02-04 18:05:49 +00:00
2023-07-16 17:06:44 +00:00
Code style follows the `rustfmt.toml` file.