A minimalist CLI email client for developers. Connect directly to standard IMAP/SMTP servers, pipe stdin to send messages, and manage folders natively.
π‘ First time? Run t3e with no arguments to explore the interactive demo sandbox.
Prefer direct binary tarball downloads? See manual options β
See how developers leverage t3e to build custom email automations and integrations.
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.
# 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
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.
# Send system disk usage report every night $ df -h | t3e send \ --to sysadmin@company.com \ --subject "Disk Space Alert: $(hostname)" \ --yes
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.
# 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
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.
# 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}')
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.
# 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 }
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 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
Designed for integration, automation, and keyboard workflows.
Compiled natively with zero dependencies. Starts instantly, uses minimal RAM, and runs directly inside your shell without bloat.
Support for redirects and piping. Pipe build logs directly to email bodies or filter mailboxes using standard shell tools.
Configure multiple email accounts (e.g. personal, work) in a single TOML file and switch between them dynamically using the global account flag.
Added --uid option to t3e sync for targeted synchronization of specific email UIDs and multi-UID lists.
Overhauled t3e sync architecture with deterministic sliding windows, --incremental deficit backfill, --refresh-flags metadata mode, redundant read-sync elimination, and MIME parsing fixes.
Comprehensive flag synchronization across all cached emails in t3e sync, search result flag reconciliation, and documented local cache architecture.
Added selective attachment downloading with --attachment by index/name, attachment listing mode, and fixed local cache read status synchronization.
Added new t3e forward (alias t3e fwd) command supporting rich plain text and HTML forwarding, attachment preservation, and --as-attachment (.eml RFC822).
Added automatic inline cid: image resolution in HTML emails into self-contained data: URIs, and removed legacy date string from t3e read --json.
Standardized schema on Unix timestamps across database cache and JSON outputs, and simplified t3e senders --json structure.
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.
Added local caching and incremental synchronization with t3e sync for instant offline reads and listings, global --debug diagnostic logging, and polished CLI help formatting.
Added automatic active binary directory detection for in-place self-updates (t3e update), enhanced installer permissions and TTY handling, and updated sandbox demo tutorials.
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.
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.
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.
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.
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.
Added new t3e senders command to aggregate unique senders, modularized codebase refactoring, increased scan limit for t3e list --sender, and display name resolution defaults.
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.
Non-blocking update notification UX and absolute path resolution for draft attachments.
Automated draft saving to TOML on abort, direct draft file sending (-d/--draft), interactive attachment wizard prompts, and SMTP-to-IMAP sent folder sync.
Added --json support for t3e folders subcommand to list mail folders programmatically.
Introducing automated version checking (24h cache, 48h rate-limited prompt cooldown) and interactive binary self-updating (t3e update).
Interactive feedback submission command (t3e feedback) with system diagnostic info collection and Google Form integration.
Linux ARM64 (aarch64) precompiled binary release build support in CI/CD pipeline and install.sh.
Markdown header (#) support in email draft bodies and refined fzf workflow documentation.
Native support for JSON formatted output (--json) when executing t3e list and t3e read subcommands.
Binary email attachment parsing and sending, merged interactive send prompt flow, and pipeline build optimizations.
Reply and Reply-all support with automated population of recipient addresses, subject lines, and email context.
Multi-recipient email handling with To, Cc, and Bcc header fields display during listing and composing.
Configurable socket connection timeouts, automatic paged reading using system pager, and HTML-to-text formatting.
Choose your preferred installation method: quick automated shell script or direct binary tarball extraction.
Automatically detects OS and CPU architecture, downloads the precompiled binary, and installs it into your system PATH.
Download precompiled release archives directly for offline, containerized, or custom directory installations (v0.4.10):
# 1. Extract archive $ tar -xzf t3e-linux-x86_64.tar.gz # 2. Move executable to your PATH $ sudo mv t3e /usr/local/bin/
Learn how to use t3e by walking through the zero-config demo mode commands.
Run t3e with no arguments to initialize the sandbox configuration and enter simulated demo mode.
Quickly list the emails inside your folder with their UID, status indicator, sender, subject, and date.
View the details and body text of a specific email using its UID.
Flag emails interactively (with prompt verification) or append --yes for non-interactive scripting.
Move an email to Trash by UID, verifying interactively or passing --yes for automation.
Display all available mail folders on your server and query a specific folder like Trash.
Configure multiple accounts, credentials, and modern OAuth2 device authorization in a single TOML file.
# 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 workt3e send -a icloud