ymailink
/install ymailink
ymailink Email CLI
ymailink is a Python CLI email client (v0.1.0) for managing emails from the terminal. It supports four backends:
| Backend | Read | Send | Auth |
|---|---|---|---|
| IMAP | imapclient | — | password (raw/cmd/keyring) |
| SMTP | — | aiosmtplib | password (raw/cmd/keyring) |
| Outlook (Graph API) | httpx + msal | httpx + msal | OAuth2 (device flow) |
| Gmail (Google API) | google-api-python-client | google-api-python-client | OAuth2 (local server) |
| Exchange | exchangelib | exchangelib | password (auto/NTLM/basic) |
Installation
Before using any ymailink commands, always verify ymailink is installed first. Run which ymailink or ymailink --version. If not installed, guide the user to run:
pip install git+https://github.com/lizhisec/ymailink.git
To install with optional dependencies (for specific backends or AI features):
# Install with all optional dependencies
pip install "git+https://github.com/lizhisec/ymailink.git#egg=ymailink[all]"
# Or install specific extras
pip install "git+https://github.com/lizhisec/ymailink.git#egg=ymailink[outlook,gmail,keyring,exchange,ai]"
If GitHub is inaccessible, use Gitee mirror as the git source:
pip install git+https://gitee.com/w3hsec/ymailink.git
# With optional dependencies
pip install "git+https://gitee.com/w3hsec/ymailink.git#egg=ymailink[all]"
Prerequisites
- Python 3.11+ installed.
ymailinkinstalled (see Installation section above).- A configuration file at
~/.config/ymailink/config.toml(or custom path via-c). - IMAP/SMTP credentials, OAuth2 app registration, or Exchange server details.
- For AI features (
ymailink ai ...): an API key configured under[ai]in config (seereferences/configuration.md).
Quick Reference — All Commands
Seven command groups, 27 subcommands:
account — Manage accounts
| Subcommand | Action |
|---|---|
account list |
List configured accounts |
account doctor |
Diagnose account connection |
account configure |
Run interactive wizard (prints config to stdout — copy-paste to ~/.config/ymailink/config.toml) |
folder — Manage folders
| Subcommand | Action |
|---|---|
folder list |
List all folders (shows count + unread — IMAP omits these) |
folder add \x3Cname> |
Create folder |
folder delete \x3Cname> |
Delete folder |
folder expunge \x3Cname> |
Permanently remove deleted messages (IMAP only; Outlook/Gmail/Exchange are no-ops) |
folder purge \x3Cname> |
Delete ALL messages in folder (batched 500 at a time) |
mail — Manage messages
| Subcommand | Action |
|---|---|
mail list [-f FOLDER] [-p PAGE] [-s SIZE] [-q QUERY] |
List messages (default INBOX, page 1, size 20). Search syntax depends on backend. |
mail thread \x3Cid> [-f FOLDER] |
View a single message by ID (fetches one message, not a full thread) |
mail read \x3Cid> [-f FOLDER] |
Read message body (marks as SEEN) |
mail write [--headers K:V ...] |
Interactive compose via $EDITOR (or vi if unset) |
mail send [raw] |
Send raw message from file or stdin |
mail reply \x3Cid> [-f FOLDER] [--all] |
Reply to message (reply-all with --all) |
mail forward \x3Cid> [-f FOLDER] |
Forward message |
mail copy \x3Cids...> -t TARGET [-f FOLDER] |
Copy messages to target folder |
mail move \x3Cids...> -t TARGET [-f FOLDER] |
Move messages to target folder |
mail delete \x3Cids...> [-f FOLDER] |
Delete messages (IMAP: hard delete via EXPUNGE; Gmail: moves to trash) |
flag — Manage message flags
| Subcommand | Action |
|---|---|
flag add \x3Cids...> -g FLAGS... [-f FOLDER] |
Add flags |
flag set \x3Cids...> -g FLAGS... [-f FOLDER] |
Replace all flags |
flag remove \x3Cids...> -g FLAGS... [-f FOLDER] |
Remove flags |
Valid flags: seen, answered, flagged, deleted, draft (case-insensitive)
attachment — Download attachments
| Subcommand | Action |
|---|---|
attachment download \x3Cid> [-f FOLDER] [-d DIR] |
Download attachments. Directory: --dir → account config → global config → ~/Downloads |
Note: Only IMAP backends provide attachment binary data. Outlook/Gmail/Exchange backends report metadata (name, size) but cannot download the actual file bytes yet.
template — Programmatic message composition
| Subcommand | Action |
|---|---|
template write |
Generate blank compose template → stdout |
template reply \x3Cid> [-f FOLDER] [--all] |
Generate reply template → stdout |
template forward \x3Cid> [-f FOLDER] |
Generate forward template → stdout |
template save [raw] |
Save template as draft (reads from file or stdin) |
template send [raw] |
Send template from file or stdin |
ai — AI-powered email operations
| Subcommand | Action |
|---|---|
ai short-summary \x3Cid> [-f FOLDER] |
One-line email summary |
ai summary \x3Cid> [-f FOLDER] |
Detailed email summary |
ai rapid-reply \x3Cid> [-f FOLDER] |
Quick reply suggestions (3) |
Note: AI features require [ai] section in config (see references/configuration.md) and the ai extra: pip install ymailink[ai]. All three commands fetch the target email, send it to the AI API (https://ai.ymailink.com), and print the result.
Global Flags
| Flag | Description |
|---|---|
-c, --config |
Config file path (repeatable for deep merge) |
-o, --output |
Output format: plain (default) or json |
-a, --account |
Account name (defaults to configured default account) |
-q, --quiet |
Suppress non-error log output (does not suppress command output) |
--debug |
Enable debug logging |
-V, --version |
Show version (ymailink 0.1.0) |
Configuration Setup
Interactive wizard
ymailink account configure
This prompts for account details and prints the resulting TOML config to stdout. It does not write the file — you need to copy-paste the output to ~/.config/ymailink/config.toml.
See references/configuration.md for manual config setup with all backend types (IMAP/SMTP, Outlook, Gmail, Gmail-via-IMAP, Exchange), password auth methods (raw/cmd/keyring), OAuth2 token management, folder aliases, signatures, download directories, and proxy support.
Common Workflows
List and read emails
# List INBOX
ymailink mail list
# Search
ymailink mail list --query "from:[email protected] subject:meeting"
# Paginate
ymailink mail list --page 2 --page-size 10
# Switch folder
ymailink mail list --folder "Sent"
# Read a message
ymailink mail read 42
# JSON output for scripting
ymailink --output json mail list
Compose and send
# Interactive compose (opens $EDITOR)
ymailink mail write
ymailink mail write --headers "To:[email protected]" --headers "Subject:Hello"
# Send raw message from file
ymailink mail send message.txt
# Pipe to send
cat message.txt | ymailink mail send
Programmatic template workflow
# Generate a blank template, edit, send
ymailink template write > msg.txt
vim msg.txt
ymailink template send msg.txt
# Or pipe directly
ymailink template write | cat - msg_body.txt | ymailink template send
Reply and forward
# Reply (opens editor)
ymailink mail reply 42
# Reply to all
ymailink mail reply 42 --all
# Forward
ymailink mail forward 42
Organize messages
# Move message(s) to folder
ymailink mail move 42 --target "Archive"
ymailink mail move 42 43 44 --target "Archive" --folder INBOX
# Copy message(s)
ymailink mail copy 55 56 --target "Important"
# Delete message(s)
ymailink mail delete 42
ymailink mail delete 42 43 44 --folder INBOX
# Flag messages
ymailink flag add 42 --flags seen --flags flagged
ymailink flag set 42 --flags answered
ymailink flag remove 42 --flags flagged
Manage folders
ymailink folder list
ymailink folder add "Archive"
ymailink folder delete "Old Folder"
ymailink folder expunge "Trash"
ymailink folder purge "Junk"
AI-powered email operations
# One-line summary of an email
ymailink ai short-summary 42
# Detailed summary
ymailink ai summary 42
# Quick reply suggestions (3 options)
ymailink ai rapid-reply 42
# Specify a different folder
ymailink ai short-summary 42 --folder INBOX
ymailink ai summary 42 --folder "Sent"
ymailink ai rapid-reply 42 --folder "Archive"
Download attachments
ymailink attachment download 42
ymailink attachment download 42 --folder INBOX --dir ~/Downloads
Multiple Accounts
# List configured accounts
ymailink account list
# Switch accounts
ymailink --account work mail list
ymailink --account personal mail list
Message Composition
ymailink uses standard RFC 822 format. See references/message-composition.md for the full reference covering: headers, address formats, plain text bodies, reply/forward quoting, interactive compose, file/stdin send, and template workflows.
A minimal message looks like:
From: You \[email protected]>
To: [email protected]
Subject: Hello
Message body here.
Default Behavior
Running ymailink with no arguments is equivalent to:
ymailink mail list --folder INBOX --page 1 --page-size 20
Tips & Nuances
- Message IDs are folder-scoped (IMAP UIDs). Re-list after changing folders.
- Plural aliases work for all command groups:
accounts,folders,flags,attachments,templates. (Notmail.) mail writeuses$EDITORor$VISUAL, falling back tovi. The temp file uses the.emlsuffix. If no changes are detected, the message is not sent.mail reply/mail forwardalso detect unchanged content and abort sending.mail read --htmlflag exists in the CLI but currently has no effect — the text body is always shown.- Gmail delete moves to trash (not a hard delete). Use the Gmail web interface or API to permanently delete.
- IMAP delete is hard: sets
\Deleted+ EXPUNGE, permanently removing messages. - Folder counts (count, unread) are only populated by Outlook, Gmail, and Exchange backends — IMAP does not fetch them.
- Store passwords securely using
pass, system keyring (pip install ymailink[keyring]), or a command that outputs the password. Plaintext passwords in config are for testing only. - AI features require
pip install ymailink[ai]and an[ai]section in config with anapi-key. The default AI endpoint ishttps://ai.ymailink.com. - OAuth2 tokens are cached in
~/.config/ymailink/tokens/{provider}_{account}.json(chmod 0600). Delete the file to force re-authorization. - Proxy support for Outlook and Gmail backends: set
HTTPS_PROXYorhttps_proxyenvironment variable. - Account not found errors produce unhandled exceptions. Verify account names with
ymailink account list. - Config file not found returns an empty config (no error). Commands will fail with "No accounts configured" rather than a file-not-found error.
--quietonly suppresseslog()output (dimmed stderr). It does not suppress command output (table/JSON on stdout) or error messages.
References
references/configuration.md— Full config setup: IMAP/SMTP/Outlook/Gmail/Exchange auth, AI config, password methods, OAuth2, folder aliases, signatures, proxyreferences/message-composition.md— RFC 822 format, headers, address formats, reply/forward quoting, compose workflows
Debugging
# Enable debug logging
ymailink --debug mail list
# Diagnose connection issues
ymailink account doctor
# Suppress non-error output
ymailink --quiet mail list
# Check version
ymailink --version
Help
ymailink --help
ymailink mail list --help
ymailink flag add --help
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install ymailink - After installation, invoke the skill by name or use
/ymailink - Provide required inputs per the skill's parameter spec and get structured output
What is ymailink?
Terminal email client for managing emails from the command line. Supports IMAP/SMTP, Outlook (Graph API), Gmail (Google API), and Exchange backends, plus AI-... It is an AI Agent Skill for Claude Code / OpenClaw, with 37 downloads so far.
How do I install ymailink?
Run "/install ymailink" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is ymailink free?
Yes, ymailink is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does ymailink support?
ymailink is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created ymailink?
It is built and maintained by 2969192546 (@2969192546); the current version is v1.1.1.