[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5638":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},5638,"himalaya","pimalaya\u002Fhimalaya","pimalaya","CLI to manage emails","https:\u002F\u002Fpimalaya.org",null,"Rust",6402,201,43,15,0,13,64,309,61,37.92,"MIT License",false,"master",[26,27,28,29,5,30,31,32,7,33,34,35,36],"cli","client","email","gpg","imap","notmuch","pgp","rust","sendmail","smtp","terminal","2026-06-12 02:01:13","\u003Cdiv align=\"center\">\n  \u003Cimg src=\".\u002Flogo.svg\" alt=\"Logo\" width=\"128\" height=\"128\" \u002F>\n  \u003Ch1>📫 Himalaya\u003C\u002Fh1>\n  \u003Cp>CLI to manage emails\u003C\u002Fp>\n  \u003Cp>\n    \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya\u002Freleases\u002Flatest\">\u003Cimg alt=\"Release\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fpimalaya\u002Fhimalaya?color=success\"\u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Frepology.org\u002Fproject\u002Fhimalaya\u002Fversions\">\u003Cimg alt=\"Repology\" src=\"https:\u002F\u002Fimg.shields.io\u002Frepology\u002Frepositories\u002Fhimalaya?color=success\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fmatrix.to\u002F#\u002F#pimalaya:matrix.org\">\u003Cimg alt=\"Matrix\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fchat-%23pimalaya-blue?style=flat&logo=matrix&logoColor=white\"\u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Ffosstodon.org\u002F@pimalaya\">\u003Cimg alt=\"Mastodon\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnews-%40pimalaya-blue?style=flat&logo=mastodon&logoColor=white\"\u002F>\u003C\u002Fa>\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n```\nhimalaya envelope list --account posteo --folder Archives.FOSS --page 2\n```\n\n![screenshot](.\u002Fscreenshot.jpeg)\n\n## Table of contents\n\n- [Features](#features)\n- [Installation](#installation)\n  - [Pre-built binary](#pre-built-binary)\n  - [Cargo](#cargo)\n  - [Arch linux](#arch-linux)\n  - [Homebrew](#homebrew)\n  - [Scoop](#scoop)\n  - [Fedora Linux\u002FCentOS\u002FRHEL](#fedora-linuxcentosrhel)\n  - [Nix](#nix)\n  - [Sources](#sources)\n- [Configuration](#configuration)\n  - [Proton Mail](#proton-mail)\n  - [Gmail](#gmail)\n  - [Outlook](#outlook)\n  - [iCloud Mail](#icloud-mail)\n- [Interfaces](#interfaces)\n- [FAQ](#faq)\n- [Social](#social)\n- [Sponsoring](#sponsoring)\n\n## Features\n\n- Multi-accounting configuration:\n  - interactive via **wizard** (requires `wizard` feature)\n  - manual via **TOML**-based configuration file (see [`.\u002Fconfig.sample.toml`](.\u002Fconfig.sample.toml))\n- Message composition based on `$EDITOR`\n- **IMAP** backend (requires `imap` feature)\n- **Maildir** backend (requires `maildir` feature)\n- **Notmuch** backend (requires `notmuch` feature)\n- **SMTP** backend (requires `smtp` feature)\n- **Sendmail** backend (requires `sendmail` feature)\n- Global system **keyring** for secret management (requires `keyring` feature)\n- **OAuth 2.0** authorization flow (requires `oauth2` feature)\n- **JSON** output via `--output json`\n- **PGP** encryption:\n  - via shell commands (requires `pgp-commands` feature)\n  - via [GPG](https:\u002F\u002Fwww.gnupg.org\u002F) bindings (requires `pgp-gpg` feature)\n  - via native implementation (requires `pgp-native` feature)\n\n*Himalaya CLI is written in [Rust](https:\u002F\u002Fwww.rust-lang.org\u002F), and relies on [cargo features](https:\u002F\u002Fdoc.rust-lang.org\u002Fcargo\u002Freference\u002Ffeatures.html) to enable or disable functionalities. Default features can be found in the `features` section of the [`Cargo.toml`](.\u002FCargo.toml#L18), or on [docs.rs](https:\u002F\u002Fdocs.rs\u002Fcrate\u002Fhimalaya\u002Flatest\u002Ffeatures).*\n\n## Installation\n\n### Pre-built binary\n\nHimalaya CLI can be installed with the `install.sh` installer:\n\n*As root:*\n\n```\ncurl -sSL https:\u002F\u002Fraw.githubusercontent.com\u002Fpimalaya\u002Fhimalaya\u002Fmaster\u002Finstall.sh | sudo sh\n```\n\n*As a regular user:*\n\n```\ncurl -sSL https:\u002F\u002Fraw.githubusercontent.com\u002Fpimalaya\u002Fhimalaya\u002Fmaster\u002Finstall.sh | PREFIX=~\u002F.local sh\n```\n\nThese commands install the latest binary from the GitHub [releases](https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya\u002Freleases) section.\n\nIf you want a more up-to-date version than the latest release, check out the [releases](https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya\u002Factions\u002Fworkflows\u002Freleases.yml) GitHub workflow and look for the *Artifacts* section. You will find a pre-built binary matching your OS. These pre-built binaries are built from the `master` branch.\n\n*Such binaries are built with the default cargo features. If you need more features, please use another installation method.*\n\n### Cargo\n\nHimalaya CLI can be installed with [cargo](https:\u002F\u002Fdoc.rust-lang.org\u002Fcargo\u002F):\n\n```\ncargo install himalaya --locked\n```\n\nWith only IMAP support:\n\n```\ncargo install himalaya --locked --no-default-features --features imap\n```\n\nYou can also use the git repository for a more up-to-date (but less stable) version:\n\n```\ncargo install --locked --git https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya.git\n```\n\n### Arch Linux\n\nHimalaya CLI can be installed on [Arch Linux](https:\u002F\u002Farchlinux.org\u002F) with either the community repository:\n\n```\npacman -S himalaya\n```\n\nor the [user repository](https:\u002F\u002Faur.archlinux.org\u002F):\n\n```\ngit clone https:\u002F\u002Faur.archlinux.org\u002Fhimalaya-git.git\ncd himalaya-git\nmakepkg -isc\n```\n\nIf you use [yay](https:\u002F\u002Fgithub.com\u002FJguer\u002Fyay), it is even simplier:\n\n```\nyay -S himalaya-git\n```\n\n### Homebrew\n\nHimalaya CLI can be installed with [Homebrew](https:\u002F\u002Fbrew.sh\u002F):\n\n```\nbrew install himalaya\n```\n\nNote: cargo features are not compatible with brew. If you need features like OAuth 2.0, please use a different installation method.\n\n### Scoop\n\nHimalaya CLI can be installed with [Scoop](https:\u002F\u002Fscoop.sh\u002F):\n\n```\nscoop install himalaya\n```\n\n### Fedora Linux\u002FCentOS\u002FRHEL\n\nHimalaya CLI can be installed on [Fedora Linux](https:\u002F\u002Ffedoraproject.org\u002F)\u002FCentOS\u002FRHEL via [COPR](https:\u002F\u002Fcopr.fedorainfracloud.org\u002Fcoprs\u002Fatim\u002Fhimalaya\u002F) repo:\n\n```\ndnf copr enable atim\u002Fhimalaya\ndnf install himalaya\n```\n\n### Nix\n\nHimalaya CLI can be installed with [Nix](https:\u002F\u002Fserokell.io\u002Fblog\u002Fwhat-is-nix):\n\n```\nnix-env -i himalaya\n```\n\nYou can also use the git repository for a more up-to-date (but less stable) version:\n\n```\nnix-env -if https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya\u002Farchive\u002Fmaster.tar.gz\n```\n\n*Or, from within the source tree checkout:*\n\n```\nnix-env -if .\n```\n\nIf you have the [Flakes](https:\u002F\u002Fnixos.wiki\u002Fwiki\u002FFlakes) feature enabled:\n\n```\nnix profile install himalaya\n```\n\n*Or, from within the source tree checkout:*\n\n```\nnix profile install\n```\n\n*You can also run Himalaya directly without installing it:*\n\n```\nnix run himalaya\n```\n\n### Sources\n\nHimalaya CLI can be installed from sources.\n\nFirst you need to install the Rust development environment (see the [rust installation documentation](https:\u002F\u002Fdoc.rust-lang.org\u002Fcargo\u002Fgetting-started\u002Finstallation.html)):\n\n```\ncurl https:\u002F\u002Fsh.rustup.rs -sSf | sh\n```\n\nThen, you need to clone the repository and install dependencies:\n\n```\ngit clone https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya.git\ncd himalaya\ncargo check\n```\n\nNow, you can build Himalaya:\n\n```\ncargo build --release\n```\n\n*Binaries are available under the `target\u002Frelease` folder.*\n\n## Configuration\n\nJust run `himalaya`, the wizard will help you to configure your default account.\n\nAccounts can be (re)configured via the wizard using the command `himalaya account configure \u003Cname>`.\n\nYou can also manually edit your own configuration, from scratch:\n\n- Copy the content of the documented [`.\u002Fconfig.sample.toml`](.\u002Fconfig.sample.toml)\n- Paste it in a new file `~\u002F.config\u002Fhimalaya\u002Fconfig.toml`\n- Edit, then comment or uncomment the options you want\n\n### Proton Mail\n\nWhen using Proton Bridge, emails are synchronized locally and exposed via a local IMAP\u002FSMTP server. This implies 2 things:\n\n- Id order may be reversed or shuffled, but envelopes will still be sorted by date.\n- SSL\u002FTLS needs to be deactivated manually.\n- The password to use is the one generated by Proton Bridge, not the one from your Proton Mail account.\n\n```toml\n[accounts.proton]\nemail = \"example@proton.me\"\n\nbackend.type = \"imap\"\nbackend.host = \"127.0.0.1\"\nbackend.port = 1143\nbackend.encryption.type = \"none\"\nbackend.login = \"example@proton.me\"\nbackend.auth.type = \"password\"\nbackend.auth.raw = \"*****\"\n\nmessage.send.backend.type = \"smtp\"\nmessage.send.backend.host = \"127.0.0.1\"\nmessage.send.backend.port = 1025\nmessage.send.backend.encryption.type = \"none\"\nmessage.send.backend.login = \"example@proton.me\"\nmessage.send.backend.auth.type = \"password\"\nmessage.send.backend.auth.raw = \"*****\"\n```\n\nIf you still want to use TLS, you need to export the certificate generated by Proton Bridge, then give it to Himalaya:\n\n```toml\nbackend.encryption.type = \"start-tls\"\nbackend.encryption.cert = \"\u002Fpath\u002Fto\u002Fexported\u002Fcert.pem\"\n\nmessage.send.backend.encryption.type = \"start-tls\"\nmessage.send.backend.encryption.cert = \"\u002Fpath\u002Fto\u002Fexported\u002Fcert.pem\"\n```\n\nKeeping your password inside the configuration file is good for testing purpose, but it is not safe. You have 2 better alternatives:\n\n- Save your password in any password manager that can be queried via the CLI:\n\n  ```toml\n  backend.auth.cmd = \"pass show proton\"\n  ```\n\n- Use the global keyring of your system (requires the `keyring` cargo feature):\n\n  ```toml\n  backend.auth.keyring = \"proton-example\"\n  ```\n\n  Running `himalaya account configure proton` will ask for your IMAP password, just paste the one generated previously.\n\n### Gmail\n\nGoogle passwords cannot be used directly. There is two ways to authenticate yourself:\n\n#### Using [App Passwords](https:\u002F\u002Fsupport.google.com\u002Fmail\u002Fanswer\u002F185833)\n\nThis option is the simplest and the fastest. First, be sure that:\n\n- IMAP is enabled\n- Two-step authentication is enabled\n- Less secure app access is enabled\n\nFirst create a [dedicated password](https:\u002F\u002Fmyaccount.google.com\u002Fapppasswords) for Himalaya.\n\n```toml\n[accounts.gmail]\nemail = \"example@gmail.com\"\n\nfolder.aliases.inbox = \"INBOX\"\nfolder.aliases.sent = \"[Gmail]\u002FSent Mail\"\nfolder.aliases.drafts = \"[Gmail]\u002FDrafts\"\nfolder.aliases.trash = \"[Gmail]\u002FTrash\"\n\nbackend.type = \"imap\"\nbackend.host = \"imap.gmail.com\"\nbackend.port = 993\nbackend.login = \"example@gmail.com\"\nbackend.auth.type = \"password\"\nbackend.auth.raw = \"*****\"\n\nmessage.send.backend.type = \"smtp\"\nmessage.send.backend.host = \"smtp.gmail.com\"\nmessage.send.backend.port = 465\nmessage.send.backend.login = \"example@gmail.com\"\nmessage.send.backend.auth.type = \"password\"\nmessage.send.backend.auth.cmd = \"*****\"\n```\n\nKeeping your password inside the configuration file is good for testing purpose, but it is not safe. You have 2 better alternatives:\n\n- Save your password in any password manager that can be queried via the CLI:\n\n  ```toml\n  backend.auth.cmd = \"pass show gmail\"\n  ```\n\n- Use the global keyring of your system (requires the `keyring` cargo feature):\n\n  ```toml\n  backend.auth.keyring = \"gmail-example\"\n  ```\n\n  Running `himalaya configure -a gmail` will ask for your IMAP password, just paste the one generated previously.\n\n#### Using OAuth 2.0\n\nThis option is the most secure but the hardest to configure. It requires the `oauth2` and `keyring` cargo features.\n\nFirst, you need to get your OAuth 2.0 credentials by following [this guide](https:\u002F\u002Fdevelopers.google.com\u002Fidentity\u002Fprotocols\u002Foauth2#1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name-.). Once you get your client id and your client secret, you can configure your Himalaya account this way:\n\n```toml\n[accounts.gmail]\nemail = \"example@gmail.com\"\n\nfolder.aliases.inbox = \"INBOX\"\nfolder.aliases.sent = \"[Gmail]\u002FSent Mail\"\nfolder.aliases.drafts = \"[Gmail]\u002FDrafts\"\nfolder.aliases.trash = \"[Gmail]\u002FTrash\"\n\nbackend.type = \"imap\"\nbackend.host = \"imap.gmail.com\"\nbackend.port = 993\nbackend.login = \"example@gmail.com\"\nbackend.auth.type = \"oauth2\"\nbackend.auth.method = \"xoauth2\"\nbackend.auth.client-id = \"*****\"\nbackend.auth.client-secret.keyring = \"gmail-oauth2-client-secret\"\nbackend.auth.access-token.keyring = \"gmail-oauth2-access-token\"\nbackend.auth.refresh-token.keyring = \"gmail-oauth2-refresh-token\"\nbackend.auth.auth-url = \"https:\u002F\u002Faccounts.google.com\u002Fo\u002Foauth2\u002Fv2\u002Fauth\"\nbackend.auth.token-url = \"https:\u002F\u002Fwww.googleapis.com\u002Foauth2\u002Fv3\u002Ftoken\"\nbackend.auth.pkce = true\nbackend.auth.scope = \"https:\u002F\u002Fmail.google.com\u002F\"\n\nmessage.send.backend.type = \"smtp\"\nmessage.send.backend.host = \"smtp.gmail.com\"\nmessage.send.backend.port = 465\nmessage.send.backend.login = \"example@gmail.com\"\nmessage.send.backend.auth.type = \"oauth2\"\nmessage.send.backend.auth.method = \"xoauth2\"\nmessage.send.backend.auth.client-id = \"*****\"\nmessage.send.backend.auth.client-secret.keyring = \"gmail-oauth2-client-secret\"\nmessage.send.backend.auth.access-token.keyring = \"gmail-oauth2-access-token\"\nmessage.send.backend.auth.refresh-token.keyring = \"gmail-oauth2-refresh-token\"\nmessage.send.backend.auth.auth-url = \"https:\u002F\u002Faccounts.google.com\u002Fo\u002Foauth2\u002Fv2\u002Fauth\"\nmessage.send.backend.auth.token-url = \"https:\u002F\u002Fwww.googleapis.com\u002Foauth2\u002Fv3\u002Ftoken\"\nmessage.send.backend.auth.pkce = true\nmessage.send.backend.auth.scope = \"https:\u002F\u002Fmail.google.com\u002F\"\n```\n\nRunning `himalaya account configure gmail` will complete your OAuth 2.0 setup and ask for your client secret.\n\n### Outlook\n\n```toml\n[accounts.outlook]\nemail = \"example@outlook.com\"\n\nbackend.type = \"imap\"\nbackend.host = \"outlook.office365.com\"\nbackend.port = 993\nbackend.login = \"example@outlook.com\"\nbackend.auth.type = \"password\"\nbackend.auth.raw = \"*****\"\n\nmessage.send.backend.type = \"smtp\"\nmessage.send.backend.host = \"smtp-mail.outlook.com\"\nmessage.send.backend.port = 587\nmessage.send.backend.encryption.type = \"start-tls\"\nmessage.send.backend.login = \"example@outlook.com\"\nmessage.send.backend.auth.type = \"password\"\nmessage.send.backend.auth.raw = \"*****\"\n```\n\nKeeping your password inside the configuration file is good for testing purpose, but it is not safe. You have 2 better alternatives:\n\n- Save your password in any password manager that can be queried via the CLI:\n\n  ```toml\n  backend.auth.cmd = \"pass show outlook\"\n  ```\n\n- Use the global keyring of your system (requires the `keyring` cargo feature):\n\n  ```toml\n  backend.auth.keyring = \"outlook-example\"\n  ```\n\n  Running `himalaya account configure outlook` will ask for your IMAP password, just paste the one generated previously.\n\n#### Using OAuth 2.0\n\nThis option is the most secure but the hardest to configure. First, you need to get your OAuth 2.0 credentials by following [this guide](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fexchange\u002Fclient-developer\u002Flegacy-protocols\u002Fhow-to-authenticate-an-imap-pop-smtp-application-by-using-oauth). Once you get your client id and your client secret, you can configure your Himalaya account this way:\n\n```toml\n[accounts.outlook]\nemail = \"example@outlook.com\"\n\nbackend.type = \"imap\"\nbackend.host = \"outlook.office365.com\"\nbackend.port = 993\nbackend.login = \"example@outlook.com\"\nbackend.auth.type = \"oauth2\"\nbackend.auth.client-id = \"*****\"\nbackend.auth.client-secret.keyring = \"outlook-oauth2-client-secret\"\nbackend.auth.access-token.keyring = \"outlook-oauth2-access-token\"\nbackend.auth.refresh-token.keyring = \"outlook-oauth2-refresh-token\"\nbackend.auth.auth-url = \"https:\u002F\u002Flogin.microsoftonline.com\u002Fcommon\u002Foauth2\u002Fv2.0\u002Fauthorize\"\nbackend.auth.token-url = \"https:\u002F\u002Flogin.microsoftonline.com\u002Fcommon\u002Foauth2\u002Fv2.0\u002Ftoken\"\nbackend.auth.pkce = true\nbackend.auth.scopes = [\"https:\u002F\u002Foutlook.office.com\u002FIMAP.AccessAsUser.All\", \"https:\u002F\u002Foutlook.office.com\u002FSMTP.Send\"]\n\nmessage.send.backend.type = \"smtp\"\nmessage.send.backend.host = \"smtp.mail.outlook.com\"\nmessage.send.backend.port = 587\nmessage.send.backend.starttls = true\nmessage.send.backend.login = \"example@outlook.com\"\nmessage.send.backend.auth.type = \"oauth2\"\nmessage.send.backend.auth.client-id = \"*****\"\nmessage.send.backend.auth.client-secret.keyring = \"outlook-oauth2-client-secret\"\nmessage.send.backend.auth.access-token.keyring = \"outlook-oauth2-access-token\"\nmessage.send.backend.auth.refresh-token.keyring = \"outlook-oauth2-refresh-token\"\nmessage.send.backend.auth.auth-url = \"https:\u002F\u002Flogin.microsoftonline.com\u002Fcommon\u002Foauth2\u002Fv2.0\u002Fauthorize\"\nmessage.send.backend.auth.token-url = \"https:\u002F\u002Flogin.microsoftonline.com\u002Fcommon\u002Foauth2\u002Fv2.0\u002Ftoken\"\nmessage.send.backend.auth.pkce = true\nmessage.send.backend.auth.scopes = [\"https:\u002F\u002Foutlook.office.com\u002FIMAP.AccessAsUser.All\", \"https:\u002F\u002Foutlook.office.com\u002FSMTP.Send\"]\n```\n\nRunning `himalaya account configure outlook` will complete your OAuth 2.0 setup and ask for your client secret.\n\n### iCloud Mail\n\nFrom the [iCloud Mail](https:\u002F\u002Fsupport.apple.com\u002Fen-us\u002FHT202304) support page:\n\n- IMAP port = `993`.\n- IMAP login = name of your iCloud Mail email address (for example, `johnappleseed`, not `johnappleseed@icloud.com`)\n- SMTP port = `587` with `STARTTLS`\n- SMTP login = full iCloud Mail email address (for example, `johnappleseed@icloud.com`, not `johnappleseed`)\n\n```toml\n[accounts.icloud]\nemail = \"johnappleseed@icloud.com\"\n\nbackend.type = \"imap\"\nbackend.host = \"imap.mail.me.com\"\nbackend.port = 993\nbackend.login = \"johnappleseed\"\nbackend.auth.type = \"password\"\nbackend.auth.raw = \"*****\"\n\nmessage.send.backend.type = \"smtp\"\nmessage.send.backend.host = \"smtp.mail.me.com\"\nmessage.send.backend.port = 587\nmessage.send.backend.encryption.type = \"start-tls\"\nmessage.send.backend.login = \"johnappleseed@icloud.com\"\nmessage.send.backend.auth.type = \"password\"\nmessage.send.backend.auth.raw = \"*****\"\n\nfolder.aliases.sent = \"Sent Messages\"\n```\n\nKeeping your password inside the configuration file is good for testing purpose, but it is not safe. You have 2 better alternatives:\n\n- Save your password in any password manager that can be queried via the CLI:\n\n  ```toml\n  backend.auth.cmd = \"pass show icloud\"\n  ```\n\n- Use the global keyring of your system (requires the `keyring` cargo feature):\n\n  ```toml\n  backend.auth.keyring = \"icloud-example\"\n  ```\n\n  Running `himalaya account configure icloud` will ask for your IMAP password, just paste the one generated previously.\n\n## Interfaces\n\nThese interfaces are built at the top of Himalaya CLI to improve the User Experience:\n\n- [pimalaya\u002Fhimalaya-vim](https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fhimalaya-vim): Vim plugin\n- [dantecatalfamo\u002Fhimalaya-emacs](https:\u002F\u002Fgithub.com\u002Fdantecatalfamo\u002Fhimalaya-emacs): Emacs plugin\n- [jns\u002Fhimalaya](https:\u002F\u002Fwww.raycast.com\u002Fjns\u002Fhimalaya): Raycast extension\n- [openclaw\u002Fopenclaw](https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fhimalaya\u002FSKILL.md): OpenClaw SKILL\n- [parisni\u002Fdfzf](https:\u002F\u002Fgithub.com\u002Fparisni\u002Fdfzf): dfzf integration\n\n## FAQ\n\n\u003Cdetails>\n  \u003Csummary>How different is it from aerc, mutt or alpine?\u003C\u002Fsummary>\n\n  Aerc, mutt and alpine can be categorized as Terminal User Interfaces (TUI). When the program is executed, your terminal is locked into an event loop and you interact with your emails using keybinds.\n\n  Himalaya is also a TUI, but more specifically a Command-Line Interface (CLI). There is no event loop: you interact with your emails using shell commands, in a stateless way.\n\n  Additionaly, Himalaya CLI is based on `email-lib`, which is also part of the Pimalaya project. The aim is not just to propose a new terminal interface, but also to expose Rust tools to deal with emails. Anyone who knows Rust language can build his own email interface, without re-inventing the wheel.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n  \u003Csummary>How to compose a message?\u003C\u002Fsummary>\n\n  An email message is a list of **headers** (`key: val`) followed by a **body**. They form together a template:\n\n  ```eml\n  Header: value\n  Header: value\n  Header: value\n\n  Body\n  ```\n\n  ***Headers and body must be separated by an empty line.***\n\n  ### Headers\n\n  Here a non-exhaustive list of valid email message template headers:\n\n  - `Message-ID`: represents the message identifier (you usually do not need to set up it manually)\n  - `In-Reply-To`: represents the identifier of the replied message\n  - `Date`: represents the date of the message\n  - `Subject`: represents the subject of the message\n  - `From`: represents the address of the sender\n  - `To`: represents the addresses of the receivers\n  - `Reply-To`: represents the address the receiver should reply to instead of the `From` header\n  - `Cc`: represents the addresses of the other receivers (carbon copy)\n  - `Bcc`: represents the addresses of the other hidden receivers (blind carbon copy)\n\n  An address can be:\n\n  - a single email address `user@domain`\n  - a named address `Name \u003Cuser@domain>`\n  - a quoted named address `\"Name\" \u003Cuser@domain>`\n\n  Multiple address are separated by a comma `,`: `user@domain, Name \u003Cuser@domain>, \"Name\" \u003Cuser@domain>`.\n\n  ### Plain text body\n\n  Email message template body can be written in plain text. The result will be compiled into a single `text\u002Fplain` MIME part:\n\n  ```eml\n  From: alice@localhost\n  To: Bob \u003Cbob@localhost>\n  Subject: Hello from Himalaya\n\n  Hello, world!\n  ```\n\n  ### MML body\n\n  Email message template body can also be written in MML. The MIME Meta Language was introduced by the Emacs [`mml`](https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Femacs\u002Fmanual\u002Fhtml_node\u002Femacs-mime\u002FComposing.html) ELisp module. Pimalaya [ported it](https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fcore\u002Ftree\u002Fmaster\u002Fmml) in Rust.\n\n  A raw email message is structured according to the [MIME](https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc2045) standard. This standard produces verbose, non-friendly messages. Here comes MML: it simplifies the way email message body are structured. Thanks to its simple XML-based syntax, it allows you to easily add multiple parts, attach a binary file, or attach inline image to your body without dealing with the MIME standard.\n\n  For instance, this MML template:\n\n  ```eml\n  From: alice@localhost\n  To: bob@localhost\n  Subject: MML simple\n\n  \u003C#multipart type=alternative>\n  This is a plain text part.\n  \u003C#part type=text\u002Fenriched>\n  \u003Ccenter>This is a centered enriched part\u003C\u002Fcenter>\n  \u003C#\u002Fmultipart>\n  ```\n\n  compiles into the following MIME Message:\n\n  ```eml\n  Subject: MML simple\n  To: bob@localhost\n  From: alice@localhost\n  MIME-Version: 1.0\n  Date: Tue, 29 Nov 2022 13:07:01 +0000\n  Content-Type: multipart\u002Falternative;\n   boundary=\"4CV1Cnp7mXkDyvb55i77DcNSkKzB8HJzaIT84qZe\"\n\n  --4CV1Cnp7mXkDyvb55i77DcNSkKzB8HJzaIT84qZe\n  Content-Type: text\u002Fplain; charset=utf-8\n  Content-Transfer-Encoding: 7bit\n\n  This is a plain text part.\n  --4CV1Cnp7mXkDyvb55i77DcNSkKzB8HJzaIT84qZe\n  Content-Type: text\u002Fenriched\n  Content-Transfer-Encoding: 7bit\n\n  \u003Ccenter>This is a centered enriched part\u003C\u002Fcenter>\n  --4CV1Cnp7mXkDyvb55i77DcNSkKzB8HJzaIT84qZe--\n  ```\n\n  *See more examples at [pimalaya\u002Fcore\u002Fmml](https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fcore\u002Ftree\u002Fmaster\u002Fmml\u002Fexamples).*\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n  \u003Csummary>How to add attachments to a message?\u003C\u002Fsummary>\n\n  *Read first about the FAQ: How to compose a message?*.\n\n  ```eml\n  From: alice@localhost\n  To: bob@localhost\n  Subject: How to attach stuff\n\n  Regular binary attachment:\n  \u003C#part filename=\u002Fpath\u002Fto\u002Ffile.pdf>\u003C#\u002Fpart>\n\n  Custom file name:\n  \u003C#part filename=\u002Fpath\u002Fto\u002Ffile.pdf name=custom.pdf>\u003C#\u002Fpart>\n\n  Inline image:\n  \u003C#part disposition=inline filename=\u002Fpath\u002Fto\u002Fimage.png>\u003C#\u002Fpart>\n  ```\n\n  *See more examples at [pimalaya\u002Fcore\u002Fmml](https:\u002F\u002Fgithub.com\u002Fpimalaya\u002Fcore\u002Ftree\u002Fmaster\u002Fmml\u002Fexamples).*\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n  \u003Csummary>How to debug Himalaya CLI?\u003C\u002Fsummary>\n\n  The simplest way is to use `--debug` and `--trace` arguments.\n\n  The advanced way is based on environment variables:\n\n  - `RUST_LOG=\u003Clevel>`: determines the log level filter, can be one of `off`, `error`, `warn`, `info`, `debug` and `trace`.\n  - `RUST_SPANTRACE=1`: enables the spantrace (a span represent periods of time in which a program was executing in a particular context).\n  - `RUST_BACKTRACE=1`: enables the error backtrace.\n  - `RUST_BACKTRACE=full`: enables the full error backtrace, which include source lines where the error originated from.\n\n  Logs are written to the `stderr`, which means that you can redirect them easily to a file:\n\n  ```\n  RUST_LOG=debug himalaya 2>\u002Ftmp\u002Fhimalaya.log\n  ```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n  \u003Csummary>How the wizard discovers IMAP\u002FSMTP configs?\u003C\u002Fsummary>\n\n  All the lookup mechanisms use the email address domain as base for the lookup. It is heavily inspired from the Thunderbird [Autoconfiguration](https:\u002F\u002Fudn.realityripple.com\u002Fdocs\u002FMozilla\u002FThunderbird\u002FAutoconfiguration) protocol. For example, for the email address `test@example.com`, the lookup is performed as (in this order):\n\n  1. check for `autoconfig.example.com`\n  2. look up of `example.com` in the ISPDB (the Thunderbird central database)\n  3. look up `MX example.com` in DNS, and for `mx1.mail.hoster.com`, look up `hoster.com` in the ISPDB\n  4. look up `SRV example.com` in DNS\n  5. try to guess (`imap.example.com`, `smtp.example.com`…)\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n  \u003Csummary>How to disable color output?\u003C\u002Fsummary>\n\n  Simply set the environment variable NO_COLOR=1\n\u003C\u002Fdetails>\n\n## Social\n\n- Chat on [Matrix](https:\u002F\u002Fmatrix.to\u002F#\u002F#pimalaya:matrix.org)\n- News on [Mastodon](https:\u002F\u002Ffosstodon.org\u002F@pimalaya) or [RSS](https:\u002F\u002Ffosstodon.org\u002F@pimalaya.rss)\n- Mail at [pimalaya.org@posteo.net](mailto:pimalaya.org@posteo.net)\n\n## Sponsoring\n\n[![nlnet](https:\u002F\u002Fnlnet.nl\u002Flogo\u002Fbanner-160x60.png)](https:\u002F\u002Fnlnet.nl\u002F)\n\nSpecial thanks to the [NLnet foundation](https:\u002F\u002Fnlnet.nl\u002F) and the [European Commission](https:\u002F\u002Fwww.ngi.eu\u002F) that have been financially supporting the project for years:\n\n- 2022: [NGI Assure](https:\u002F\u002Fnlnet.nl\u002Fproject\u002FHimalaya\u002F)\n- 2023: [NGI Zero Entrust](https:\u002F\u002Fnlnet.nl\u002Fproject\u002FPimalaya\u002F)\n- 2024: [NGI Zero Core](https:\u002F\u002Fnlnet.nl\u002Fproject\u002FPimalaya-PIM\u002F) *(still ongoing in 2026)*\n\nIf you appreciate the project, feel free to donate using one of the following providers:\n\n[![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F-GitHub%20Sponsors-fafbfc?logo=GitHub%20Sponsors)](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fsoywod)\n[![Ko-fi](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F-Ko--fi-ff5e5a?logo=Ko-fi&logoColor=ffffff)](https:\u002F\u002Fko-fi.com\u002Fsoywod)\n[![Buy Me a Coffee](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee&logoColor=000000)](https:\u002F\u002Fwww.buymeacoffee.com\u002Fsoywod)\n[![Liberapay](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F-Liberapay-f6c915?logo=Liberapay&logoColor=222222)](https:\u002F\u002Fliberapay.com\u002Fsoywod)\n[![thanks.dev](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F-thanks.dev-000000?logo=data:image\u002Fsvg+xml;base64,PHN2ZyB3aWR0aD0iMjQuMDk3IiBoZWlnaHQ9IjE3LjU5NyIgY2xhc3M9InctMzYgbWwtMiBsZzpteC0wIHByaW50Om14LTAgcHJpbnQ6aW52ZXJ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05Ljc4MyAxNy41OTdINy4zOThjLTEuMTY4IDAtMi4wOTItLjI5Ny0yLjc3My0uODktLjY4LS41OTMtMS4wMi0xLjQ2Mi0xLjAyLTIuNjA2di0xLjM0NmMwLTEuMDE4LS4yMjctMS43NS0uNjc4LTIuMTk1LS40NTItLjQ0Ni0xLjIzMi0uNjY5LTIuMzQtLjY2OUgwVjcuNzA1aC41ODdjMS4xMDggMCAxLjg4OC0uMjIyIDIuMzQtLjY2OC40NTEtLjQ0Ni42NzctMS4xNzcuNjc3LTIuMTk1VjMuNDk2YzAtMS4xNDQuMzQtMi4wMTMgMS4wMjEtMi42MDZDNS4zMDUuMjk3IDYuMjMgMCA3LjM5OCAwaDIuMzg1djEuOTg3aC0uOTg1Yy0uMzYxIDAtLjY4OC4wMjctLjk4LjA4MmExLjcxOSAxLjcxOSAwIDAgMC0uNzM2LjMwN2MtLjIwNS4xNTYtLjM1OC4zODQtLjQ2LjY4Mi0uMTAzLjI5OC0uMTU0LjY4Mi0uMTU0IDEuMTUxVjUuMjNjMCAuODY3LS4yNDkgMS41ODYtLjc0NSAyLjE1NS0uNDk3LjU2OS0xLjE1OCAxLjAwNC0xLjk4MyAxLjMwNXYuMjE3Yy44MjUuMyAxLjQ4Ni43MzYgMS45ODMgMS4zMDUuNDk2LjU3Ljc0NSAxLjI4Ny43NDUgMi4xNTR2MS4wMjFjMCAuNDcuMDUxLjg1NC4xNTMgMS4xNTIuMTAzLjI5OC4yNTYuNTI1LjQ2MS42ODIuMTkzLjE1Ny40MzcuMjYuNzMyLjMxMi4yOTUuMDUuNjIzLjA3Ni45ODQuMDc2aC45ODVabTE0LjMxNC03LjcwNmgtLjU4OGMtMS4xMDggMC0xLjg4OC4yMjMtMi4zNC42NjktLjQ1LjQ0NS0uNjc3IDEuMTc3LS42NzcgMi4xOTVWMTQuMWMwIDEuMTQ0LS4zNCAyLjAxMy0xLjAyIDIuNjA2LS42OC41OTMtMS42MDUuODktMi43NzQuODloLTIuMzg0di0xLjk4OGguOTg0Yy4zNjIgMCAuNjg4LS4wMjcuOTgtLjA4LjI5Mi0uMDU1LjUzOC0uMTU3LjczNy0uMzA4LjIwNC0uMTU3LjM1OC0uMzg0LjQ2LS42ODIuMTAzLS4yOTguMTU0LS42ODIuMTU0LTEuMTUydi0xLjAyYzAtLjg2OC4yNDgtMS41ODYuNzQ1LTIuMTU1LjQ5Ny0uNTcgMS4xNTgtMS4wMDQgMS45ODMtMS4zMDV2LS4yMTdjLS44MjUtLjMwMS0xLjQ4Ni0uNzM2LTEuOTgzLTEuMzA1LS40OTctLjU3LS43NDUtMS4yODgtLjc0NS0yLjE1NXYtMS4wMmMwLS40Ny0uMDUxLS44NTQtLjE1NC0xLjE1Mi0uMTAyLS4yOTgtLjI1Ni0uNTI2LS40Ni0uNjgyYTEuNzE5IDEuNzE5IDAgMCAwLS43MzctLjMwNyA1LjM5NSA1LjM5NSAwIDAgMC0uOTgtLjA4MmgtLjk4NFYwaDIuMzg0YzEuMTY5IDAgMi4wOTMuMjk3IDIuNzc0Ljg5LjY4LjU5MyAxLjAyIDEuNDYyIDEuMDIgMi42MDZ2MS4zNDZjMCAxLjAxOC4yMjYgMS43NS42NzggMi4xOTUuNDUxLjQ0NiAxLjIzMS42NjggMi4zNC42NjhoLjU4N3oiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)](https:\u002F\u002Fthanks.dev\u002Fsoywod)\n[![PayPal](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F-PayPal-0079c1?logo=PayPal&logoColor=ffffff)](https:\u002F\u002Fwww.paypal.com\u002Fpaypalme\u002Fsoywod)\n","Himalaya 是一个用于管理电子邮件的命令行界面工具。它支持多账户配置，用户可以通过向导或TOML配置文件进行设置，并且能够基于用户的$EDITOR编辑器来编写邮件。该工具利用IMAP、SMTP等协议处理邮件收发，同时支持Maildir和Notmuch后端，以及PGP加密功能确保邮件安全。此外，Himalaya还提供了OAuth 2.0认证流程和JSON格式输出选项。此项目采用Rust语言开发，保证了高性能与内存安全性。Himalaya非常适合需要在终端环境中高效管理和处理电子邮件的技术人员使用。",2,"2026-06-11 03:04:27","top_language"]