Команды
Как читается команда, глобальные флаги, каждая написанная вручную команда и каждое пространство имён ресурсов.
Как читается команда
openemail <command> [subcommand] [arguments] [flags]- Флаги ставятся где угодно после команды, до или после аргументов. Глобальные флаги вроде
--profileи--jsonможно ставить и перед ней, а любой другой флаг в этом месте останавливает команду с подсказкой перенести его после имени команды. - Значение идёт за флагом через пробел или знак равенства, поэтому
--limit 50и--limit=50одно и то же. Короткие флаги тоже принимают значения, как в-n 50. - Значению, которое начинается с дефиса, нужен знак равенства, как в
--subject=-draft-, потому что после пробела оно читается как следующий флаг, а о первом сообщается, что у него нет значения. Отрицательные числа работают в обоих случаях. Пустое значение считается ошибкой использования, а не тихим значением по умолчанию. - Переключатель включается через
--flagи выключается через--no-flag, а--flag=trueи--flag=falseтоже работают. - Список пишется через запятую или повторением:
--to [email protected],[email protected]или--toдважды. - Всё после
--это аргумент и никогда не флаг; так проходит поиск по-from:ada. - Неизвестная команда или флаг завершается с кодом выхода
2и предлагает ближайшее совпадение.
Глобальные флаги
| Флаг | Что делает |
|---|---|
| -h, --help | Справка по команде или группе |
| -v, --version | Вывести версию CLI |
| --json | Только JSON в stdout, ошибки в виде JSON в stderr и никаких вопросов |
| -y, --yes | Подтверждать разрушительные действия без вопросов. Никогда не пропускает код подтверждения |
| --profile <name> | Использовать этот сохранённый профиль, как OPENEMAIL_PROFILE |
| --api-key <key> | Использовать этот API-ключ только для этой команды, игнорируя профили |
| --base-url <url> | Адрес API для API-ключа или команды, которая не отправляет учётных данных, как OPENEMAIL_BASE_URL. Сохранённый вход всегда использует свой |
| --no-input | Никогда не спрашивать. Отсутствующее значение завершается с кодом выхода 2 |
| --no-color | Без цвета, как NO_COLOR и FORCE_COLOR=0 |
| --debug | Выводить идентификаторы запросов, неудачный запрос и трассировки стека |
Команды, написанные вручную
Они написаны для людей: спрашивают недостающее, форматируют вывод и объединяют несколько вызовов API, где это помогает.
| Команда | Что делает |
|---|---|
| login | Войти через браузер или сохранить API-ключ |
| whoami | Под кем вы вошли, с рабочим пространством, scope и сроком действия |
| status | То, что показывает whoami, плюс ваши адреса отправки и состояние каждого домена |
| verify | Ввести код подтверждения сейчас, чтобы чувствительные команды работали 60 минут |
| logout | Выйти и забыть профиль |
| profile list, use, current, remove | Показать, переключить и удалить сохранённые входы |
| send | Отправить, запланировать или перевести и отправить письмо |
| inbox [folder] | Показать цепочки в папке |
| search <query> | Искать в почте с тем же синтаксисом, что и в приложении |
| read <thread-id> | Читать цепочку письмо за письмом |
| reply <thread-id> | Ответить на последнее письмо цепочки |
| archive, unarchive, trash, star, unstar | Разложить одну или несколько цепочек |
| mark read, mark unread | Отметить цепочки прочитанными или непрочитанными |
| snooze, unsnooze | Скрыть цепочки до более позднего времени или вернуть их сейчас |
| label add, label remove | Ставить метки на цепочки или снимать их |
| temp new, list, read, watch, delete | Одноразовые ящики, без входа |
| ai translate, languages, compose, summarize | Переводить, писать и кратко излагать письма с ИИ |
| mcp config, tools, call, serve | Подключать ИИ-клиенты или вызывать MCP-инструменты самому |
| docs ask, open, read | Спрашивать, открывать и читать эту документацию |
| open [page] | Открыть страницу веб-приложения |
| api <method> <path> | Вызвать любой эндпоинт REST с вашим входом |
| update | Проверить npm на более новый выпуск |
| completion <shell> | Вывести скрипт автодополнения для bash, zsh или fish |
| version | Вывести версии CLI, SDK и среды выполнения |
| help [command] | Показать справку по любой команде |
Команды ресурсов
Каждый метод SDK это ещё и команда, openemail <namespace> <verb>. Пространство имён это пространство имён SDK в kebab-case, а глагол это имя метода в kebab-case, поэтому keys.listRequests становится openemail keys list-requests. Вместе они покрывают весь REST API.
openemail domains listopenemail domains create --domain acme.comopenemail rules create --data @rule.jsonopenemail keys list-requests 9f2c1a4b7e05d3862c1f0a44 --failed-only --allopenemail files download file_6bb640f5b99e47deb758f1f5 --out report.pdf- Идентификатор, который принимает метод, это аргумент, как в
openemail domains get <id>. Каждое поле тела запроса это флаг с его именем в kebab-case:replyToстановится--reply-to, аcolor.backgroundColorстановится--color-background-color. - Три поля, флаг которых конфликтовал бы с глобальным флагом, переименованы:
--template-version,--label-colorи--resend-key. --dataпринимает всё тело в виде JSON: встроенно, из файла через@pathили из stdin через-, а любой флаг, переданный вдобавок, переопределяет свой ключ. Флаг, принимающий объект, читает JSON так же.- Числа и переключатели читаются как таковые, а списки пишутся через запятую или повторением.
- Отсутствующее обязательное значение запрашивается в терминале, а везде ещё это ошибка использования (код выхода
2). - Глагол списка читает одну страницу.
--limitзадаёт её размер, а--cursorпродолжает с выведенного курсора.--allчитает все страницы и передаёт элементы потоком,--max <n>останавливается после стольких, а--ndjsonвыводит по одному JSON-объекту в строке. - Всё разрушительное, например удаление, отзыв, ротация, отмена или очистка, просит подтверждения, если вы не передадите
--yes. - Загрузка записывается в файл из
--out, а в stdout только тогда, когда stdout не терминал.
openemail <namespace> <verb> --help показывает каждый аргумент и флаг с типом, scope, которые нужны вызову, его метод и путь, что он возвращает, и примечания из справочника API.
Каждое пространство имён
Столбец «Также» перечисляет другие имена, на которые откликается пространство имён.
| Пространство имён | Также | Глаголы |
|---|---|---|
| me | get, ping, rotate | |
| keys | key | list, get, create, update, delete, rotate, revoke, list-requests, list-activity, list-workspace-requests, list-workspace-activity |
| addresses | address | list |
| languages | language | list |
| emails | email | send, send-batch, translate, list, get, list-events, get-tracking, cancel, reschedule |
| templates | template | list, get, create, update, duplicate, replace-content, delete, list-versions, get-version, publish, restore-version, delete-version, list-starters, get-starter, list-fonts, render, preview, get-analytics, list-sends, send |
| tracking | list, get-stats, get, list-opens, list-clicks | |
| threads | thread | list, get, update, trash, snooze, unsnooze, list-attachments |
| drafts | draft | list, get, create, update, delete |
| labels | list, list-colors, get, create, update, delete | |
| contacts | contact | list, get, create, update, delete, set-audiences, list-people, save, delete-many, set-photo, remove-photo, block, unblock, list-threads, activity |
| audiences | audience | list, growth, get, create, update, delete, empty, list-contacts, add-contact, remove-contact, add-contacts, remove-contacts, import-contacts |
| broadcasts | broadcast | preview, send, list, get, stats, list-recipients, get-recipient, cancel |
| domains | domain | list, get, create, verify, update, delete, list-addresses, create-address, get-address, update-address, delete-address |
| rules | rule | list, get, create, update, delete, reorder, test, list-runs |
| webhooks | webhook | list, get, create, update, delete, rotate-secret, test, list-deliveries, get-delivery, replay-delivery, list-workspace-deliveries, list-activity, list-workspace-activity |
| imports | import | list, get, create, upload-state, upload-chunk, start, cancel, list-failures, delete-upload, import-files |
| provider-imports | provider-import, providerImports | inspect, create, list, get, cancel |
| calendar | list-events, get-event, get-event-ics | |
| settings | setting | get, update |
| roles | role | list, get, create, update, delete, list-permissions |
| members | member | list, get, add, update, remove, grant-address, revoke-address, list-invitations, revoke-invitation, resend-invitation |
| suppressions | suppression | list, get, add, remove |
| files | file | list, get, stats, download, list-links, create-link, revoke-link, upload, delete, delete-many |
| temp-mail | tempMail | list-domains, create, get, extend, delete, list-messages, get-message, delete-message, list-attachments |
Псевдонимы
| Псевдоним | Для |
|---|---|
| ls | list |
| show, view | get |
| new, add | create |
| edit | update |
| rm, del, remove | delete |
| openemail ls | openemail inbox |
| openemail show | openemail read |
В members и suppressions, где глаголы называются add и remove, new и create ведут к add, а rm, del и delete ведут к remove. У некоторых написанных вручную подкоманд есть свои псевдонимы, их перечисляет справка.
Любой вызов REST
openemail api <method> <path> отправляет один запрос в REST API через тот же транспорт, что и любая другая команда, поэтому действуют ваш профиль или ключ, обновление токена и коды подтверждения. Путь сам по себе означает GET. Ответ в JSON выводится отформатированным, а неудачный запрос выводит ошибку API и завершается соответствующим кодом.
openemail api /keys/selfopenemail api GET /threads --query folder=inbox --query limit=5openemail api POST /labels --data '{"name":"Receipts"}'openemail api PATCH /threads/CAHk7pQ2x9LmZ4 --data @patch.jsonopenemail api GET /files/file_6bb640f5b99e47deb758f1f5/content --out report.pdf-d,--dataпринимает тело как встроенный JSON, из файла через@pathили из stdin через-.-q,--queryи-H,--headerпринимаютkey=valueи могут повторяться, а-o,--outсохраняет ответ в файл как есть.- Путь указывается относительно адреса API. Полный URL, путь, который вышел бы за пределы адреса, и заголовок
Authorizationотклоняются с кодом выхода2до любой отправки, потому что CLI сама подставляет учётные данные.
Справка
openemail --helpopenemail help sendopenemail domains --helpopenemail domains create --helpopenemail --help перечисляет каждую команду по назначению. Группа перечисляет свои подкоманды с примерами, а команда показывает всё, что принимает. openemail docs open cli открывает эти страницы.