Himalaya Email CLI
Himalaya is a CLI email client that lets you manage emails from the terminal using IMAP, SMTP, Notmuch, or Sendmail backends.
References
references/configuration.md(config file setup + IMAP/SMTP authentication)
Prerequisites
- Himalaya CLI - the
himalayabinary must already be onPATH. Check withhimalaya --version.- Recommended: v1.2.0 or newer. Older releases can fail against some IMAP servers.
- A configuration file at
~/.config/himalaya/config.toml - IMAP/SMTP credentials configured (password stored securely)
Configuration Setup
Run the interactive wizard to set up an account:
bashhimalaya account configure default
Or create ~/.config/himalaya/config.toml manually:
toml[accounts.personal] email = "you@example.com" display-name = "Your Name" default = true backend.type = "imap" backend.host = "imap.example.com" backend.port = 993 backend.encryption.type = "tls" backend.login = "you@example.com" backend.auth.type = "password" backend.auth.cmd = "pass show email/imap" # or use keyring message.send.backend.type = "smtp" message.send.backend.host = "smtp.example.com" message.send.backend.port = 587 message.send.backend.encryption.type = "start-tls" message.send.backend.login = "you@example.com" message.send.backend.auth.type = "password" message.send.backend.auth.cmd = "pass show email/smtp"
If using 163 mail, add backend.extensions.id.send-after-auth = true.
Common Operations
List Folders
bashhimalaya folder list
List Emails
bashhimalaya envelope list # INBOX (default) himalaya envelope list --folder "Sent" # Specific folder himalaya envelope list --page 1 --page-size 20 # With pagination
Search Emails
bashhimalaya envelope list from john@example.com subject meeting
Read an Email
bashhimalaya message read 42 # Plain text himalaya message export 42 --full # Raw MIME
Send / Compose Emails
Recommended: Use template write | template send pipeline:
bashexport EDITOR=cat himalaya template write \ -H "To: recipient@example.com" \ -H "Subject: Email Subject" \ "Email body content" | himalaya template send
With CC:
bashexport EDITOR=cat himalaya template write \ -H "To: recipient@example.com" \ -H "Cc: cc@example.com" \ -H "Subject: Email Subject" \ "Email body content" | himalaya template send
With attachments (Python fallback):
pythonimport smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders msg = MIMEMultipart() msg['From'] = 'sender@example.com' msg['To'] = 'recipient@example.com' msg['Subject'] = 'Email with attachment' msg.attach(MIMEText('Email body', 'plain')) with open('/path/to/file.pdf', 'rb') as f: part = MIMEBase('application', 'octet-stream') part.set_payload(f.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="file.pdf"') msg.attach(part) server = smtplib.SMTP_SSL('smtp.example.com', 465) server.login('sender@example.com', 'password') server.send_message(msg) server.quit()
Known limitations:
- MML attachment parsing may fail in himalaya v1.1.0 - use Python for attachments
message writehangs in non-interactive mode - usetemplate write | template sendmessage sendmay fail with header parsing - usetemplate send
Configuration requirement: Set message.send.save-to-folder in config.toml:
toml[accounts.default] message.send.save-to-folder = "Sent"
Move/Copy Emails
bashhimalaya message move 42 "Archive" himalaya message copy 42 "Important"
Delete an Email
bashhimalaya message delete 42
Manage Flags
bashhimalaya flag add 42 --flag seen himalaya flag remove 42 --flag seen
Multiple Accounts
bashhimalaya account list # List accounts himalaya --account work envelope list # Use specific account
Attachments
bashhimalaya attachment download 42 # Save attachments himalaya attachment download 42 --dir ~/dl # Save to directory
Output Formats
bashhimalaya envelope list --output json himalaya envelope list --output plain
Debugging
bashRUST_LOG=debug himalaya envelope list RUST_LOG=trace RUST_BACKTRACE=1 himalaya envelope list
Tips
- Message IDs are relative to the current folder; re-list after folder changes.
- Store passwords securely using
pass, system keyring, or a command. - For automation: Always use
template write | template sendwithexport EDITOR=cat. - 163 Mail: Set
backend.extensions.id.send-after-auth = trueandmessage.send.save-to-folder = "Sent". - Folder names: Use English folder names for better compatibility.


