本文へ移動
cccskills
無料GitHub で公開

himalaya

CLI to manage emails via IMAP/SMTP. Use `himalaya` to list, read, write, reply, forward, search, and organize emails from the terminal. Supports multiple accounts and message composition with MML (MIME Meta Language).

インストール方法を見る

含まれるファイル(2)

  • SKILL.md6.8 KB
  • references/configuration.md4.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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

  1. Himalaya CLI - the himalaya binary must already be on PATH. Check with himalaya --version.
    • Recommended: v1.2.0 or newer. Older releases can fail against some IMAP servers; v1.2.0+ includes related fixes.
  2. A configuration file at ~/.config/himalaya/config.toml
  3. 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.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Build and debug Python applications using AgentScope 2.x. Consult this skill for AgentScope APIs, agent tools, multi-agent orchestration, and agent service deployment.

日本語の概要は準備中です。原文の説明を表示しています。

agentscope-ai/skills1302026年9月10日 更新

Use this skill when the user explicitly wants to connect to a running Chrome browser, scan local CDP ports, specify a `cdp_port`, or share a single browser across multiple agents/tools. By default, browser_use already launches the browser using managed CDP; if the user does not want to expose browser history, cookies, or other sensitive data, recommend using `private_mode=true` instead.

日本語の概要は準備中です。原文の説明を表示しています。

agentscope-ai/skills1302026年9月10日 更新

当用户明确希望连接到已运行的 Chrome 浏览器、扫描本地 CDP 端口、显式指定 `cdp_port`,或让多个 agent / 工具共享同一个浏览器时,使用本 skill。当前 browser_use 默认已使用 managed CDP 启动浏览器;如果用户不希望暴露浏览器历史、Cookies 等敏感信息,推荐改用 `private_mode=true` 的隐私模式。

日本語の概要は準備中です。原文の説明を表示しています。

agentscope-ai/skills1302026年9月10日 更新

Use this skill when the user needs to control the browser launch mode for browser_use. By default, browser_use launches the local Chrome/Chromium using managed CDP; `headed` controls whether the window is visible, and `private_mode` controls whether CDP is disabled in favor of Playwright.

日本語の概要は準備中です。原文の説明を表示しています。

agentscope-ai/skills1302026年9月10日 更新

当用户需要控制 browser_use 的浏览器启动方式时,使用本 skill。当前 browser_use 默认使用 managed CDP 启动本地 Chrome/Chromium;`headed` 控制是否显示窗口,`private_mode` 控制是否禁用 CDP、改走 Playwright,`browser_args` 传入额外的 Chromium 启动参数,`executable_path` 指定自定义浏览器可执行文件路径。

日本語の概要は準備中です。原文の説明を表示しています。

agentscope-ai/skills1302026年9月10日 更新

Use this skill to proactively send a one-way message to a user/session/channel, usually only when the user explicitly asks to send to a channel/session or when proactive notification is needed. First query sessions with qwenpaw chats list, then push with qwenpaw channels send.

日本語の概要は準備中です。原文の説明を表示しています。

agentscope-ai/skills1302026年9月10日 更新

agentscope-ai のスキルをすべて見る

このスキルの問題を報告する