himalaya

Himalaya is a CLI email client that lets you manage emails from the terminal using IMAP, SMTP, Notmuch, or Sendmail backends.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "himalaya" with this command: npx skills add agentscope-ai/copaw/agentscope-ai-copaw-himalaya

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 installed (himalaya --version to verify)

  • 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 (replace default with any name you want, e.g. gmail , work ):

himalaya account configure default

Or create ~/.config/himalaya/config.toml manually:

[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 you are using 163 mail account, add backend.extensions.id.send-after-auth = true in the config file to ensure proper functionality.

Common Operations

List Folders

himalaya folder list

List Emails

List emails in INBOX (default):

himalaya envelope list

List emails in a specific folder:

himalaya envelope list --folder "Sent"

List with pagination:

himalaya envelope list --page 1 --page-size 20

If meet with error, try:

himalaya envelope list -f INBOX -s 1

Search Emails

himalaya envelope list from john@example.com subject meeting

Read an Email

Read email by ID (shows plain text):

himalaya message read 42

Export raw MIME:

himalaya message export 42 --full

Send / Compose Emails

Recommended approach: Use template write | template send pipeline for simple emails.

Send a simple email:

export EDITOR=cat himalaya template write
-H "To: recipient@example.com"
-H "Subject: Email Subject"
"Email body content" | himalaya template send

Send with multiple headers:

export 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

Send with attachments (using Python):

For emails with attachments, use Python's smtplib and email.mime modules:

import 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@163.com' msg['To'] = 'recipient@example.com' msg['Subject'] = 'Email with attachment'

msg.attach(MIMEText('Email body', 'plain'))

Add attachment

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.163.com', 465) server.login('sender@163.com', 'password') server.send_message(msg) server.quit()

⚠️ MML attachment limitations: The template send command with MML format may fail with "cannot parse MML message: empty body" when using multipart/attachments. This is a known issue in himalaya v1.1.0. Use Python approach for attachments.

⚠️ Avoid message write for automation: The himalaya message write command requires interactive TUI selection (Edit/Discard/Quit) and will hang in non-interactive environments.

⚠️ message send limitations: Direct himalaya message send <raw_email> may fail with "cannot send message without a recipient" due to header parsing issues. Use template send instead.

Configuration requirement: Ensure message.send.save-to-folder is set in config.toml to avoid "Folder not exist" errors:

[accounts.163]

... other config ...

message.send.save-to-folder = "Sent"

For 163 mail accounts, create the Sent folder first if it doesn't exist:

himalaya folder create Sent

Move/Copy Emails

Move to folder:

himalaya message move 42 "Archive"

Copy to folder:

himalaya message copy 42 "Important"

Delete an Email

himalaya message delete 42

Manage Flags

Add flag:

himalaya flag add 42 --flag seen

Remove flag:

himalaya flag remove 42 --flag seen

Multiple Accounts

List accounts:

himalaya account list

Use a specific account:

himalaya --account work envelope list

Attachments

Save attachments from a message:

himalaya attachment download 42

Save to specific directory:

himalaya attachment download 42 --dir ~/Downloads

Output Formats

Most commands support --output for structured output:

himalaya envelope list --output json himalaya envelope list --output plain

Debugging

Enable debug logging:

RUST_LOG=debug himalaya envelope list

Full trace with backtrace:

RUST_LOG=trace RUST_BACKTRACE=1 himalaya envelope list

Tips

  • Use himalaya --help or himalaya <command> --help for detailed usage.

  • Message IDs are relative to the current folder; re-list after folder changes.

  • For composing rich emails with attachments, use MML syntax (see references/message-composition.md ).

  • Store passwords securely using pass , system keyring, or a command that outputs the password.

  • For automation: Always use template write | template send pipeline with export EDITOR=cat .

  • 163 Mail users: Set backend.extensions.id.send-after-auth = true and message.send.save-to-folder = "Sent" in config.

  • Folder names: Use English folder names (e.g., "Sent" instead of "已发送") for better compatibility.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

dingtalk_channel_connect

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

browser_visible

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

file_reader

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

news

No summary provided by upstream source.

Repository SourceNeeds Review