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 andj/k. - Compose & reply in-app: To / Attach / Body fields,
Ctrl+Sto send,Escto 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 pressCtrl+Ato save it to your Downloads folder. - Real trash — pressing
dmoves 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
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:
= "you@gmail.com"
= "Your Name"
= "gmail.com"
[]
= "smtp.gmail.com"
= 587
= "you@gmail.com"
= "your-app-password" # use an App Password, not your login password
= true
[]
= "imap.gmail.com"
= 993
= "you@gmail.com"
= "your-app-password"
= true
= "INBOX"
= "[Gmail]/Trash" # Gmail; other providers: "Trash" or "Deleted"
Gmail users:
trash_foldermust be[Gmail]/Trash.
Other providers: tryTrash(the default) orDeleted.
Usage
|
TUI keys
| Key | Action |
|---|---|
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:
| Platform | Path |
|---|---|
| Linux / macOS | ~/.local/share/mail-rs/mailbox.json |
| Windows | %LOCALAPPDATA%\mail-rs\mailbox.json |
Configuration lives in:
| Platform | Path |
|---|---|
| Linux / macOS | ~/.config/mail-rs/config.toml |
| Windows | %APPDATA%\mail-rs\config.toml |