# simplemailclient
A small terminal mail client written in Rust. It sends mail over SMTP, fetches
over IMAP, and gives you a split-pane TUI for reading, replying, and composing.
The installed binary is named **`mailrs`** (avoids clashing with the standard
Unix `mail` command).
## Features
- **TUI inbox** — folders (Inbox / Sent / Starred / Trash), a message list, and
a reading pane, navigable with `Tab` / arrow keys and `j` / `k`.
- **Compose & reply** in-app: To / Attach / Body fields, `Ctrl+S` to send,
`Esc` to cancel.
- **File attachments** — attach any file type up to 25 MB (zip, images, PDFs,
text, …). Each file is sent as its own MIME part, kept fully separate from
the message body. On received mail, attachments are listed below the body;
focus the reading pane, pick one with `↑`/`↓`, and press `Ctrl+A` to save it
to your Downloads folder.
- **Real trash** — pressing `d` moves the message locally *and* copies it to
the configured trash folder on the IMAP server, then expunges it from the
inbox so it never comes back on re-sync.
- **New-mail bell** — a terminal beep fires when a sync brings in unread mail.
- **Deduplication** — messages are keyed by their RFC 2822 `Message-ID`; a
message you've already seen is never re-delivered on sync.
- **Auto-sync** every 10 seconds while idle, plus on-demand sync with `S`.
Fetches up to the last 50 messages tagged `[mailrs_mail]`.
- **Contacts** auto-collected from mail you send and receive, referenced by a
stable numeric ID (use the ID in the To field to address people quickly).
## Install
```sh
cargo install simplemailclient
```
## Configuration
On first run a starter config is written to your config directory
(`~/.config/mail-rs/config.toml` on Linux/macOS,
`%APPDATA%\mail-rs\config.toml` on Windows). Fill in your SMTP/IMAP details:
```toml
identity = "you@gmail.com"
display_name = "Your Name"
domain = "gmail.com"
[smtp]
host = "smtp.gmail.com"
port = 587
username = "you@gmail.com"
password = "your-app-password" # use an App Password, not your login password
tls = true
[imap]
host = "imap.gmail.com"
port = 993
username = "you@gmail.com"
password = "your-app-password"
tls = true
inbox_folder = "INBOX"
trash_folder = "[Gmail]/Trash" # Gmail; other providers: "Trash" or "Deleted"
```
> **Gmail users**: `trash_folder` must be `[Gmail]/Trash`.
> **Other providers**: try `Trash` (the default) or `Deleted`.
## Usage
```sh
mailrs # launch the interactive TUI
mailrs read <index> # read a message by index
mailrs sync # fetch new mail via IMAP
```
### TUI keys
| `Tab` / `←→` | Move focus between panes |
| `↑↓` / `j` `k` | Navigate within a pane (or attachments in the reading pane) |
| `Enter` | Open selected message |
| `c` | Compose new message |
| `r` | Reply to the open message |
| `s` | Star / unstar |
| `d` | Move to trash (local + IMAP server) |
| `Ctrl+A` | Save the selected attachment to disk |
| `S` | Sync now |
| `?` | Toggle contacts panel |
| `q` | Quit |
In the compose modal, `Tab` cycles **To → Attach → Body**. `Enter` in the To
field jumps to the body; in the Attach field, type a file path and press
`Enter` to queue it (Backspace on an empty Attach input removes the last file).
`Ctrl+S` sends; `Esc` cancels.
## Data
Mail and contacts are stored locally:
| Linux / macOS | `~/.local/share/mail-rs/mailbox.json` |
| Windows | `%LOCALAPPDATA%\mail-rs\mailbox.json` |
Configuration lives in:
| Linux / macOS | `~/.config/mail-rs/config.toml` |
| Windows | `%APPDATA%\mail-rs\config.toml` |
## License
[MIT](LICENSE)