Unix Philosophy Email Client  β€’  v0.4.10

Email client on the Command Line.

A minimalist CLI email client for developers. Connect directly to standard IMAP/SMTP servers, pipe stdin to send messages, and manage folders natively.

Quick Installation Command:

$curl -fsSL https://t3e.dev/install | sh

πŸ’‘ First time? Run t3e with no arguments to explore the interactive demo sandbox.

Power Workflows & Automation

See how developers leverage t3e to build custom email automations and integrations.

CI/CD & Pipelines

Automate Build Alerts

Notify your team automatically when a build fails or a deployment completes. By passing the non-interactive --yes (or -y) flag and piping stdout or log files directly to stdin, you can easily integrate t3e with automated runners like GitHub Actions or GitLab CI.

build-pipeline.sh
# Send build logs only if build fails
$ npm run build > build.log 2>&1 \
  || t3e send \
  --to alerts@company.com \
  --subject "Build Failed" \
  --yes < build.log
System Monitoring

Cron Jobs & Health Reports

Schedule system backups, disk health checks, or database validations using cron, and receive direct reports in your inbox. No heavy setup or specialized tooling requiredβ€”just direct redirection of command output to t3e send.

cronjob.sh
# Send system disk usage report every night
$ df -h | t3e send \
  --to sysadmin@company.com \
  --subject "Disk Space Alert: $(hostname)" \
  --yes
CLI Integration

Piping & Grepping Messages

Extract verification codes, one-time passwords, or specific alerts instantly without opening a browser or full GUI client. Standard output from t3e list and t3e read flows seamlessly into Unix filtering tools.

terminal
# Fetch latest OTP verification code
$ t3e list -n 5 \
  | grep -i "gitlab.*verify" \
  | head -n 1 \
  | awk '{print $1}' \
  | xargs t3e read \
  | grep -oE "[0-9]{6}" \
  | head -n 1
Interactive Triage

Fuzzy Finding with fzf

Combine t3e with the command-line fuzzy finder fzf to build an interactive, keyboard-driven inbox browser. Search through your subjects or senders, and read messages instantly in a live scrollable preview pane.

terminal
# Live preview (up to 100 emails)
$ t3e list -n 100 \
  | fzf --header-lines=5 \
  --preview "t3e read {1}" \
  --preview-window=right,60%,wrap

# Select and read email
$ t3e read $(t3e list -n 100 \
    | fzf --header-lines=5 \
    | awk '{print $1}')
Developer Environment

Custom Shell Aliases & Integrations

Turn frequent email queries into fast, single-word keyboard shortcuts. Custom wrapper functions in your shell profile (e.g. .zshrc, .bashrc) make reading and checking emails faster than ever.

~/.bashrc
# Quick aliases for email triage
alias check-unread="t3e list --unread-only"

# Function
latest-mail() {
  t3e list | head -n 5 | tail -n 1 | \
    awk "{print \$1}" | xargs t3e read
}

# Function with $1=account $2=folder
email-view() {
  # Usage: email-view [account] [folder]
  local a="${1:-demo}"
  local f="${2:-INBOX}"
  t3e -a "$a" list -f "$f" -n 100 \
    | fzf --header-lines=5 \
      --preview "t3e read {1} -a $a -f '$f'" \
      --preview-window=right,60%,wrap
}
                
Power Search

Find Conversations Instantly

Execute lightning-fast server-side IMAP queries across senders, recipients, and participants. When filtering by conversation participant or recipient, t3e search automatically searches across both INBOX and Sent mailboxes with full display-name alias resolution.

search-examples.sh
# Search conversation history across INBOX and Sent
$ t3e search -p "Alice" --since 2026-01-01

# Combine sender, subject, and content criteria (AND logic)
$ t3e search --sender "Git" --subject "Build" --larger 10M

# Restrict search to Archive folder
$ t3e search -f Archive "taxes" --json

Why t3e?

Designed for integration, automation, and keyboard workflows.

10ms

Lightweight & Native

Compiled natively with zero dependencies. Starts instantly, uses minimal RAM, and runs directly inside your shell without bloat.

stdin

Unix Piping

Support for redirects and piping. Pipe build logs directly to email bodies or filter mailboxes using standard shell tools.

-a / --account

Multiple Profiles

Configure multiple email accounts (e.g. personal, work) in a single TOML file and switch between them dynamically using the global account flag.

What's New?

Latest Release

v0.4.10

October 1, 2026

Added --uid option to t3e sync for targeted synchronization of specific email UIDs and multi-UID lists.

Recent Release History

v0.4.9

October 1, 2026

Overhauled t3e sync architecture with deterministic sliding windows, --incremental deficit backfill, --refresh-flags metadata mode, redundant read-sync elimination, and MIME parsing fixes.

v0.4.8

September 28, 2026

Comprehensive flag synchronization across all cached emails in t3e sync, search result flag reconciliation, and documented local cache architecture.

v0.4.7

September 25, 2026

Added selective attachment downloading with --attachment by index/name, attachment listing mode, and fixed local cache read status synchronization.

v0.4.6

September 23, 2026

Added new t3e forward (alias t3e fwd) command supporting rich plain text and HTML forwarding, attachment preservation, and --as-attachment (.eml RFC822).

v0.4.5

September 19, 2026

Added automatic inline cid: image resolution in HTML emails into self-contained data: URIs, and removed legacy date string from t3e read --json.

v0.4.4

September 18, 2026

Standardized schema on Unix timestamps across database cache and JSON outputs, and simplified t3e senders --json structure.

v0.4.3

September 17, 2026

Added --html option to t3e read to output formatted HTML message bodies, and implemented automatic in-memory fallback when local cache storage is not writable.

v0.4.2

September 16, 2026

Added local caching and incremental synchronization with t3e sync for instant offline reads and listings, global --debug diagnostic logging, and polished CLI help formatting.

v0.4.1

September 15, 2026

Added automatic active binary directory detection for in-place self-updates (t3e update), enhanced installer permissions and TTY handling, and updated sandbox demo tutorials.

v0.3.11

September 3, 2026

Added new t3e search command with participant and field filters, added t3e accounts command, streamlined CLI options, and restricted update notifications strictly to interactive sessions.

v0.3.10

August 31, 2026

Implemented IMAP search-first filtering for t3e list --sender with two-phase name resolution and --unread-only, and unified email and display name into a single Sender column in t3e senders.

v0.3.9

August 28, 2026

Added --show-all option to t3e senders for detailed email breakdowns with read/unread markers, improved --show-unread tree formatting, and added timestamp and all_emails fields to JSON output.

v0.3.7

August 16, 2026

Enhanced the t3e senders command output to show the latest email subject per sender, added sorting by unread status, and added a --show-unread option to quickly list and filter unread emails.

v0.3.6

August 15, 2026

Standardized CLI options by globally replacing -l with -n, use -s for scan and -n for display limit in the senders command, and added example usages and option impact information to subcommand help menus.

v0.3.5

August 13, 2026

Added new t3e senders command to aggregate unique senders, modularized codebase refactoring, increased scan limit for t3e list --sender, and display name resolution defaults.

v0.3.4

August 11, 2026

Improved confirmation prompt messaging when sending an email to make it more explicit that aborting (n) will automatically save the message as a draft, and fixed interactive attachment prompt behavior when options already specify attachments.

v0.3.3

August 9, 2026

Non-blocking update notification UX and absolute path resolution for draft attachments.

v0.3.2

August 9, 2026

Automated draft saving to TOML on abort, direct draft file sending (-d/--draft), interactive attachment wizard prompts, and SMTP-to-IMAP sent folder sync.

v0.3.1

August 6, 2026

Added --json support for t3e folders subcommand to list mail folders programmatically.

v0.2.10

July 30, 2026

Introducing automated version checking (24h cache, 48h rate-limited prompt cooldown) and interactive binary self-updating (t3e update).

v0.2.9

July 25, 2026

Interactive feedback submission command (t3e feedback) with system diagnostic info collection and Google Form integration.

v0.2.8

July 21, 2026

Linux ARM64 (aarch64) precompiled binary release build support in CI/CD pipeline and install.sh.

v0.2.7

July 20, 2026

Markdown header (#) support in email draft bodies and refined fzf workflow documentation.

v0.2.6

July 16, 2026

Native support for JSON formatted output (--json) when executing t3e list and t3e read subcommands.

v0.2.5

July 12, 2026

Binary email attachment parsing and sending, merged interactive send prompt flow, and pipeline build optimizations.

v0.2.4

July 10, 2026

Reply and Reply-all support with automated population of recipient addresses, subject lines, and email context.

v0.2.3

July 9, 2026

Multi-recipient email handling with To, Cc, and Bcc header fields display during listing and composing.

v0.2.2

July 8, 2026

Configurable socket connection timeouts, automatic paged reading using system pager, and HTML-to-text formatting.

Installation Guide

Choose your preferred installation method: quick automated shell script or direct binary tarball extraction.

Option 1 β€’ Faster

Automated Install Script

Automatically detects OS and CPU architecture, downloads the precompiled binary, and installs it into your system PATH.

$curl -fsSL https://t3e.dev/install | sh
Option 2 β€’ Manual

Direct Tarball Binary Extraction

Download precompiled release archives directly for offline, containerized, or custom directory installations (v0.4.10):

Manual Extraction Commands:
# 1. Extract archive
$ tar -xzf t3e-linux-x86_64.tar.gz

# 2. Move executable to your PATH
$ sudo mv t3e /usr/local/bin/

Explore the Sandbox

Learn how to use t3e by walking through the zero-config demo mode commands.

01 / Welcome & Sandbox

Interactive Onboarding

Run t3e with no arguments to initialize the sandbox configuration and enter simulated demo mode.

t3e sandbox
$ t3e No configuration found. It looks like this is your first time running t3e on this machine! We have automatically initialized a demo configuration for you at: ~/.config/t3e/config.toml Starting Demo Mode... Welcome to t3e – a lightweight CLI email client! You are currently running in DEMO MODE. This is a local sandbox that simulates a real email server without requiring any credentials or configuration. To connect to your own email account and make t3e 'yours', edit the config file at: ~/.config/t3e/config.toml Here are the subcommands you can run: t3e list List emails in your inbox t3e search Search emails across fields (sender, recipient, subject, content) t3e senders List senders and organizations t3e read <uid> Read the content of a specific email t3e flag <uid> ... Mark emails as read, unread, or starred t3e delete <uid> Delete an email t3e send Send / compose an email interactively or via script t3e folders List available mail folders t3e accounts List configured email accounts t3e --help Show help and usage options Try out the sandbox using this quick tutorial: 1. List your emails: $ t3e list 2. Read the welcome email (UID 1): $ t3e read 1 3. Star the setup guide email (UID 2) (press 'y' to confirm, or skip with --yes): $ t3e flag 2 --star or $ t3e flag 2 --star --yes 4. Delete the piping email (UID 3) (press 'y' to confirm, or skip with --yes): $ t3e delete 3 or $ t3e delete 3 --yes 5. View the deleted email in Trash (to explore folder navigation): $ t3e list --folder Trash Note: You can always view this welcome message again by running: $ t3e welcome Happy exploring!
02 / Mail Listing

List Emails in Inbox

Quickly list the emails inside your folder with their UID, status indicator, sender, subject, and date.

t3e list
$ t3e list Account: demo (demo@t3e.dev) [DEMO MODE] Folder: INBOX UID Status Sender Subject Date 3 ● Unix Philosophy <piping@t3e... The power of piping (stdin) Tue, 23 Jun 2026 11:40:00 +0200 2 ● Setup Guide <setup@t3e.dev> How to connect your real email account Tue, 23 Jun 2026 11:50:00 +0200 1 ● Welcome to t3e <welcome@t3e... Welcome to t3e! Tue, 23 Jun 2026 12:00:00 +0200
03 / Message Reading

Read Email Body

View the details and body text of a specific email using its UID.

t3e read <uid>
$ t3e read 1 From: Welcome to t3e <welcome@t3e.dev> Date: Tue, 23 Jun 2026 12:00:00 +0200 Subject: Welcome to t3e! -------------------------------------------------------------------------------- Welcome to t3e – a lightweight CLI email client. You are currently running in DEMO MODE. This is a local sandbox that simulates a real email server without requiring any credentials or configuration. Here are the subcommands you can run: - t3e list List emails in your inbox - t3e search Search emails across fields (sender, recipient, subject, content) - t3e senders List senders and organizations - t3e read <uid> Read the content of a specific email - t3e flag <uid> --read/--star Mark emails as read, unread, or starred - t3e delete <uid> Delete an email - t3e send Send / compose an email interactively or via script - t3e folders List available mail folders - t3e accounts List configured email accounts Try marking this email as read: $ t3e flag 1 --read Or delete an email: $ t3e delete 3 Next step: Read the Setup Guide email (UID 2) to learn how to connect your real account: $ t3e read 2 Enjoy!
04 / Star & Flag

Star and Flag Emails

Flag emails interactively (with prompt verification) or append --yes for non-interactive scripting.

t3e flag
$ t3e flag 1 --star Verifying email 1 exists in INBOX... ======================= CONFIRM FLAG CHANGE ======================= Folder: INBOX UID: 1 From: Welcome to t3e <welcome@t3e.dev> Date: Tue, 23 Jun 2026 12:00:00 +0200 Subject: Welcome to t3e! =================================================================== Are you sure you want to star/flag this email? [y/N]: y Email flags for the email from Welcome to t3e <welcome@t3e.dev>, dated Tue, 23 Jun 2026 12:00:00 +0200, with subject "Welcome to t3e!" in folder INBOX were successfully starred. $ t3e flag 2 --star --yes Verifying email 2 exists in INBOX... Email flags for the email from Setup Guide <setup@t3e.dev>, dated Tue, 23 Jun 2026 11:50:00 +0200, with subject "How to connect your real email account" in folder INBOX were successfully starred.
05 / Delete

Delete Emails

Move an email to Trash by UID, verifying interactively or passing --yes for automation.

t3e delete
$ t3e delete 3 Verifying email 3 exists in INBOX... ======================= CONFIRM DELETION ======================= You are about to delete the following email: Folder: INBOX UID: 3 From: Unix Philosophy <piping@t3e.dev> Date: Tue, 23 Jun 2026 11:40:00 +0200 Subject: The power of piping (stdin) ================================================================= Are you sure you want to delete this email? [y/N]: y Deleting email 3 from INBOX... Email from Unix Philosophy <piping@t3e.dev>, dated Tue, 23 Jun 2026 11:40:00 +0200, with subject "The power of piping (stdin)" was successfully deleted from folder INBOX. $ t3e delete 2 --yes Verifying email 2 exists in INBOX... Deleting email 2 from INBOX... Email from Setup Guide <setup@t3e.dev>, dated Tue, 23 Jun 2026 11:50:00 +0200, with subject "How to connect your real email account" was successfully deleted from folder INBOX.
06 / Folder Navigation

Folders & Trash Verification

Display all available mail folders on your server and query a specific folder like Trash.

t3e folders
$ t3e folders Account: demo (demo@t3e.dev) [DEMO MODE] INBOX Sent Trash $ t3e list -f Trash Account: demo (demo@t3e.dev) [DEMO MODE] Folder: Trash UID Status Sender Subject Date 5 ● Spam Bot <spam@spam.com> Fwd: Important update regarding the project Mon, 22 Jun 2026 10:20:00 +0200 3 ● Unix Philosophy <piping@t3e... The power of piping (stdin) Tue, 23 Jun 2026 11:40:00 +0200 2 ● β˜… Setup Guide <setup@t3e.dev> How to connect your real email account Tue, 23 Jun 2026 11:50:00 +0200

Connect Your Mailbox

Configure multiple accounts, credentials, and modern OAuth2 device authorization in a single TOML file.

~/.config/t3e/config.toml
# Default account profile to load
default_account = "personal"

[accounts.personal]
imap_host = "imap.gmail.com"
imap_port = 993
smtp_host = "smtp.gmail.com"
smtp_port = 587
username  = "personal.email@gmail.com"
password  = "abcd-efgh-ijkl-mnop" # App Password

[accounts.work]
imap_host = "outlook.office365.com"
imap_port = 993
smtp_host = "smtp-mail.outlook.com"
smtp_port = 587
username  = "work.email@outlook.com"
oauth2    = true

[accounts.icloud]
imap_host = "imap.mail.me.com"
imap_port = 993
smtp_host = "smtp.mail.me.com"
smtp_port = 587
username  = "yourname@icloud.com"
password  = "abcd-efgh-ijkl-mnop" # App-Specific Password

πŸ“ Configuration path: ~/.config/t3e/config.toml (or local directory).

Gmail requires third-party clients to connect via an App Password rather than your regular account password. Enable 2-Step Verification on your Google Account, then generate a 16-character code at myaccount.google.com/apppasswords.

Set oauth2 = true to activate Microsoft's Device Code Flow. On your first command, t3e prints an authorization URL and a one-time code right in your terminal buffer.

Tokens are cached in ~/.config/t3e/tokens.toml and refreshed automatically in the background with a 90-day sliding activity window.

Both Apple iCloud (imap.mail.me.com) and Yahoo Mail (imap.mail.yahoo.com) use standard SSL/TLS port 993 for IMAP and port 587 for SMTP with dedicated application passwords.

β€’ Apple iCloud: Generate an App-Specific Password at appleid.apple.com.
β€’ Yahoo Mail: Generate an App Password in your Yahoo Account Security settings.

t3e connects to any mail provider or self-hosted server supporting standard SSL/TLS email protocols:

β€’ Custom Domains & Self-Hosted: Mailcow, Postfix/Dovecot, Migadu, Zoho, cPanel, or corporate servers using port 993 / 587 with standard mailbox credentials.
β€’ Proton Mail: Connect via Proton Mail Bridge running locally (IMAP 127.0.0.1:1143, SMTP 127.0.0.1:1025).

Manage multiple accounts in one configuration file. Switch dynamically with the global -a or --account option:

$ t3e list -a work
$ t3e send -a icloud