Email Management
Manage emails using Himalaya CLI - a powerful command-line email client supporting IMAP, SMTP, Maildir, and Notmuch backends.
Prerequisites Check
Before any email operation, verify Himalaya is installed and configured:
# Check if installed which himalaya # Check if configured (lists accounts) himalaya account list
If not installed → Guide through Installation If no accounts → Guide through Account Setup
Installation
pre-built binary
curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | PREFIX=~/.local sh
macOS (Homebrew)
brew install himalaya
Arch Linux
pacman -S himalaya
Cargo (Any OS)
cargo install himalaya --locked
Other Methods
Direct user to: https://github.com/pimalaya/himalaya#installation
Account Setup
Recommended approach: Use Himalaya's built-in wizard which auto-discovers settings.
Interactive Setup (Easiest)
# First-time setup - wizard starts automatically himalaya # Or configure a specific account himalaya account configure <account-name>
The wizard will:
- •Ask for email address
- •Auto-discover IMAP/SMTP settings
- •Prompt for password (stored securely in system keyring)
- •Test the connection
Provider-Specific Notes
| Provider | Special Requirements |
|---|---|
| Gmail | Requires App Password or OAuth 2.0 setup |
| Outlook | Works with password or OAuth 2.0 |
| iCloud | IMAP login is username only (not full email) |
| Proton Mail | Requires Proton Bridge running locally |
💡 Tip: Many providers use the same app-specific password for both email and calendar. Store credentials in pass with consistent naming (e.g., google/app-password, icloud/app-password) to reuse them across both email and calendar skills.
For detailed provider configs, see references/providers.md
Common Operations
List Emails
# List recent emails in INBOX himalaya envelope list # List from specific folder himalaya envelope list --folder "Archives" # List with specific account himalaya envelope list --account gmail # Paginate results himalaya envelope list --page 2 --page-size 20
Read Email
# Read by ID himalaya message read <id> # Read in plain text (no HTML) himalaya message read <id> --plain # Read headers only himalaya message read <id> --headers
Send Email
# Compose new email (opens $EDITOR) himalaya message write # Send with pre-filled fields himalaya message write --to "recipient@example.com" --subject "Hello" # Reply to a message himalaya message reply <id> # Reply all himalaya message reply <id> --all # Forward himalaya message forward <id>
Search Emails
# Search by subject himalaya envelope list --query "subject:meeting" # Search by sender himalaya envelope list --query "from:boss@company.com" # Search by date himalaya envelope list --query "since:2024-01-01" # Combined search himalaya envelope list --query "from:client subject:invoice unseen"
Manage Folders
# List folders himalaya folder list # Create folder himalaya folder create "Projects/ClientA" # Move message to folder himalaya message move <id> --folder "Archives" # Copy message himalaya message copy <id> --folder "Important"
Manage Flags
# Mark as read himalaya flag add <id> seen # Mark as unread himalaya flag remove <id> seen # Star/flag message himalaya flag add <id> flagged # Delete (move to trash) himalaya message delete <id>
Attachments
# List attachments himalaya attachment list <id> # Download attachment himalaya attachment download <id> <attachment-id> # Download all attachments himalaya attachment download <id> --all
Multi-Account Workflows
Switch Between Accounts
# Use specific account for any command himalaya --account work envelope list himalaya --account personal message write
Check All Accounts
# List configured accounts himalaya account list # Check unread across accounts for account in $(himalaya account list --output json | jq -r '.[].name'); do echo "=== $account ===" himalaya --account "$account" envelope list --query "unseen" --page-size 5 done
Output Formats
Himalaya supports JSON output for scripting:
# JSON output himalaya envelope list --output json # Parse with jq himalaya envelope list --output json | jq '.[].subject'
Troubleshooting
Connection Issues
# Enable debug logging RUST_LOG=debug himalaya envelope list # Full trace himalaya --debug envelope list
Common Errors
| Error | Solution |
|---|---|
| "Account not found" | Run himalaya account configure <name> |
| "Authentication failed" | Check password/app password, regenerate if needed |
| "Connection refused" | Check IMAP/SMTP host and port settings |
| "Certificate error" | Check TLS settings in config |
Reset Configuration
Config file location: ~/.config/himalaya/config.toml (or $XDG_CONFIG_HOME/himalaya/config.toml)
# View current config cat ~/.config/himalaya/config.toml # Edit config manually $EDITOR ~/.config/himalaya/config.toml # Reconfigure account interactively himalaya account configure <name> # Use alternative config file himalaya --config /path/to/custom/config.toml envelope list
Environment variable override:
export HIMALAYA_CONFIG=~/.config/himalaya/custom-config.toml himalaya envelope list
Composing Emails
Himalaya uses your $EDITOR for composing. The format is:
To: recipient@example.com Cc: other@example.com Subject: Your subject here Your message body here.
Adding Attachments (MML Syntax)
To: recipient@example.com Subject: Document attached Please find the document attached. <#part filename=/path/to/document.pdf><#/part>
Inline Images
To: recipient@example.com Subject: Screenshot Here's the screenshot: <#part disposition=inline filename=/path/to/image.png><#/part>
Quick Reference
| Task | Command |
|---|---|
| Check inbox | himalaya envelope list |
| Read email | himalaya message read <id> |
| Compose new | himalaya message write |
| Reply | himalaya message reply <id> |
| Search | himalaya envelope list --query "..." |
| Mark read | himalaya flag add <id> seen |
| Delete | himalaya message delete <id> |
| Move | himalaya message move --folder SOURCE TARGET <id...> |
- •For provider-specific setup, see references/providers.md
- •Official docs: https://github.com/pimalaya/himalaya