simplemailclient 0.1.3

A simple terminal mail client (SMTP send, IMAP fetch) with a TUI.
simplemailclient-0.1.3 is not a library.

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

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:

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

mailrs                      # launch the interactive TUI
mailrs send <username|id>   # compose and send from the command line
mailrs inbox                # list inbox messages
mailrs read <index>         # read a message by index
mailrs sync                 # fetch new mail via IMAP

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

License

MIT