Почта
Отправлять с любым телом и вложениями, читать ящик и искать в нём, отвечать, раскладывать цепочки и пользоваться одноразовыми ящиками.
Отправка
openemail send --to [email protected] --subject "Lunch?" --text "Thursday at noon works for me."Тело берётся из первого из этих источников, который есть:
--textи--html, вместе, если нужны обе части.--body-file <path>. Файл.htmlили.htmотправляется как HTML, всё остальное как текст, а-читает stdin.- То, что пришло через stdin. Ввод, начинающийся с HTML-тега, отправляется как HTML.
- Ваш редактор (
$VISUAL, затем$EDITOR), когда вы запускаете команду в терминале.
Без --from CLI отправляет с единственного адреса, с которого вы можете отправлять, или даёт выбрать адрес в терминале. Без присмотра и при нескольких адресах она останавливается и требует --from. В терминале вы видите сводку и подтверждаете до отправки, что пропускает --yes.
| Флаг | Что делает |
|---|---|
| --to, --cc, --bcc | Получатели, через запятую или повторением. Ada Lovelace <[email protected]> тоже работает |
| --from, --reply-to | Адрес отправки и заголовок Reply-To |
| -s, --subject | Строка темы |
| -a, --attach <path> | Прикрепить файл. Повторите для других |
| --at <when> | Отправить позже: время ISO, например 2026-10-01T09:00:00Z, или задержка, например 10m, 2h, 1d или PT1H |
| --undo <seconds> | Задержать немедленную отправку до 900 секунд, чтобы её ещё можно было отменить |
| --translate <language> | Перевести письмо на этот язык перед отправкой |
| --template <id>, --props <json> | Отправить сохранённый шаблон с его props вместо тела |
| --draft <id> | Отправить сохранённый черновик ровно так, как он написан |
| --thread <id> | Поместить отправленное письмо в эту цепочку |
| --tag <key=value> | Добавить тег к письму. Повторите для других |
| --idempotency-key <key> | Повторный запуск команды с тем же ключом никогда не отправляет дважды |
cat report.md | openemail send --to [email protected] --subject "Weekly report" --attach chart.pngopenemail send --to [email protected] --subject "Invoice" --body-file invoice.html --translate de --at 2hopenemail send --to [email protected] --template welcome --props '{"name":"Ada"}' --tag campaign=onboardingКоманда выводит идентификатор письма и его статус. sent, partial и failed значат, что отправка была попытана в рамках запроса, а queued и scheduled что письмо удержано. Отправка со статусом failed завершается с кодом 1, а --json выводит письмо целиком.
Каждая отправка несёт ключ идемпотентности, ваш или созданный CLI, поэтому повтор после оборванного соединения никогда не отправит письмо дважды. Передайте свой, если конвейер может повторить тот же шаг.
Вложения
--attach принимает до 20 файлов. Пока в сумме они не больше 5 МБ, они едут внутри письма. Если больше, каждый сначала загружается в «Файлы», а письмо ссылается на него, так что большому файлу не нужен лишний шаг. Тип содержимого берётся из расширения файла.
Входящие
openemail inboxopenemail inbox --unread --limit 50openemail inbox archive --sort oldestopenemail inbox --all --json | jq -r ".items[].id"Показывает одну страницу цепочек, новые сверху: когда каждая двигалась в последний раз, кто писал последним, тему, метки и идентификатор цепочки. Точка отмечает непрочитанную почту. Папка это входящие, если вы не укажете другую: sent, archive, starred, snoozed, spam, trash, draft или идентификатор метки, например USER_RECEIPTS.
-u,--unreadоставляет цепочки с непрочитанной почтой,-l,--labelоставляет цепочки с меткой, а-q,--queryсужает список поиском.-n,--limitзадаёт размер страницы, от 1 до 100 (25, если не указано). Когда осталось ещё, следующий курсор выводится в stderr для--cursor, а--allчитает все страницы.--from-contactsоставляет цепочки, последнее письмо которых пришло от сохранённого контакта, а--sortупорядочивает их поnewest,oldest,senderилиsubject.--jsonвыводит{ items, hasMore, nextCursor }с каждой цепочкой целиком.
Поиск
openemail search invoice from:adaopenemail search "quarterly report" has:pdf newer_than:30dopenemail search in:anywhere from:me to:ada --limit 50openemail search -- invoice -from:adaПоиск принимает синтаксис строки поиска в приложении: обычные слова, фразы в кавычках и операторы, такие как from:, to:, subject:, has:pdf, is:unread, after:2026/01/31 и newer_than:7d. Он ищет во входящих или в папке из --folder, если запрос не называет папку через in: или is:, а in:anywhere ищет во всех папках. Он принимает флаги inbox и показывает результаты так же.
Слово, начинающееся с дефиса, исключается из результатов, а CLI прочла бы его как флаг, поэтому ставьте -- перед таким запросом.
Чтение цепочки
openemail read CAHk7pQ2x9LmZ4openemail read CAHk7pQ2x9LmZ4 --message -1openemail read CAHk7pQ2x9LmZ4 --html --message 1 > first.htmlВыводит каждое письмо цепочки, старые сверху: кто отправил и кому, когда, тему, вложения с размером и идентификатором и тело. Текстовая часть показывается как есть, а письмо только в HTML превращается в читаемый текст, который сохраняет списки, цитаты, заголовки и ссылки. Чтение отмечает цепочку прочитанной, если вы не передадите --no-mark-read.
-m,--message <n>показывает одно письмо, считая с 1, или с самого нового при отрицательном числе.--htmlвыводит вместо этого исходный HTML.- Зашифрованное письмо здесь не расшифровывается, откройте его в веб-приложении.
Ответ
openemail reply CAHk7pQ2x9LmZ4 --text "Thanks, that works for me."openemail reply CAHk7pQ2x9LmZ4 --all --attach notes.pdfecho "Confirmed." | openemail reply CAHk7pQ2x9LmZ4 --yesОтвечает в той же цепочке тому, кто отправил последнее письмо, или на его адрес Reply-To. Если последнее письмо ваше, ответ уходит тем, кому оно было отправлено. --all ставит в копию всех остальных из этого письма, кроме ваших адресов. Тема получает Re:, если его ещё нет, а ответ уходит с адреса, на который была доставлена цепочка, если вы можете с него отправлять.
Команда принимает флаги тела, вложений, планирования, перевода, тегов и идемпотентности из send, а также --from и --subject, а --to, --cc и --bcc заменяют получателей.
Раскладывание цепочек
| Команда | Что делает |
|---|---|
| archive <thread-id...> | Из входящих, но по-прежнему находится поиском |
| unarchive <thread-id...> | Обратно во входящие |
| trash <thread-id...> | В корзину. Просит подтверждения, потому что ни один вызов не достаёт цепочку оттуда |
| star, unstar | Поставить или снять звёздочку |
| mark read, mark unread | Отметить цепочки прочитанными или непрочитанными |
| snooze <thread-id...> --until <when> | Скрыть цепочки до указанного времени или на срок, например 3h или 1w. Они возвращаются примерно в течение часа после него |
| unsnooze | Вернуть отложенные цепочки сейчас |
| label add, remove --label <id> | Ставить метки на цепочки или снимать их. openemail labels list показывает идентификаторы |
Каждая принимает несколько идентификаторов цепочек и отчитывается по каждому. Первая ошибка задаёт код выхода, а --json выводит { results, succeeded, failed }. Идентификаторы из поиска передаются напрямую:
openemail inbox --query "newer_than:30d from:alerts" --json | jq -r ".items[].id" | xargs openemail archiveОдноразовые ящики
openemail temp создаёт короткоживущие адреса, которым не нужны ни аккаунт, ни вход, что подходит для тестов регистрации и одноразовых кодов. Токен каждого ящика хранится в ~/.openemail/temp-mail.json, поэтому следующие команды находят ящик по идентификатору или адресу, или сами, если ящик у вас один.
ADDRESS=$(openemail temp new --ttl 15)openemail temp watch --first --json | jq -r .snippetopenemail temp listopenemail temp readopenemail temp read tinb_4f2a tmail_91c3openemail temp delete --yestemp newвыводит в stdout только адрес. Он живёт 60 минут, если--ttlне говорит иначе, максимум 24 часа, а--nameи--domainвыбирают адрес.temp watchвыводит то, что пришло, а затем проверяет каждые 3 секунды, пока вы его не остановите или ящик не истечёт.--firstостанавливается на первом письме, а--jsonвыводит по одной строке JSON на письмо.temp readперечисляет письма с коротким превью или выводит одно письмо целиком.temp deleteсразу удаляет ящик и его почту. Адрес остаётся зарезервированным на 7 дней после того, как закончилась бы его аренда.--inbox-tokenоткрывает доступ к ящику, который эта CLI не создавала, вtemp read,watchиdelete.- Отправитель почты в одноразовом ящике никогда не проверяется.