Перейти к документации
CLI

Аутентификация

Входите через браузер или API-ключ, держите несколько профилей и подтверждайте код перед чувствительным изменением.

Два способа войти

Запустите openemail login в терминале, и она спросит, какой способ вам нужен. В обоих случаях вход сохраняется как профиль, и каждая следующая команда использует активный.

КомандаДействует какКоды подтверждения
openemail loginВы, в рабочем пространстве и с тем доступом, который вы одобрилиСпрашивается перед некоторыми чувствительными изменениями
openemail login --with-tokenРабочее пространство, со scope, которые есть у ключаНикогда не спрашивается
  • Только вход через браузер может пользоваться ai compose, ai summarize и командами MCP.
  • Вход через браузер действует, пока не истечёт выбранное одобрение или пока вы не выйдете. Ключ работает, пока его не отзовут.

Вход через браузер

  1. openemail login регистрирует для этого входа новое приложение с именем OpenEmail CLI on <your computer> и открывает страницу одобрения OpenEmail в вашем браузере. Если браузер не открылся, воспользуйтесь выведенной ссылкой.
  2. Войдите, если нужно, затем выберите рабочее пространство, доступ CLI (чтение, чтение и отправка, полный или свой набор разрешений), домены или адреса, до которых она дотягивается, и срок одобрения.
  3. Одобрите. Браузер сам вернёт одобрение в терминал, и вкладку можно закрыть. CLI покажет, под кем вы вошли, рабочее пространство и когда истекает одобрение.
Терминал
openemail loginopenemail login --scopes emails:send,threads:readopenemail login --profile work
  • CLI ждёт одобрения 10 минут. Если выбрать «Не сейчас» на странице одобрения, вход отменяется с кодом выхода 10.
  • --scopes заранее отмечает разрешения на странице одобрения, и там их ещё можно изменить.
  • Если в профиле уже есть вход, терминал спросит, прежде чем заменить его. Без присмотра она откажется, если вы не передадите --force или --yes. Замена входа через браузер отзывает старый.

Каждый вход через браузер это отдельное подключённое приложение, которое видно в разделе «Аккаунт → Подключённые приложения» с одобренным доступом; там его можно изменить или удалить. openemail open apps открывает эту страницу.

В основе лежит поток OAuth, который использует MCP-сервер: публичный клиент с PKCE, одноразовый код и токен доступа, который действует час и обновляется за вас. Браузер возвращается на 127.0.0.1 на случайном порту, и там принимается только код этого входа.

Через SSH или без браузера

Если CLI не может открыть браузер на этой машине, она выводит ссылку: через SSH, в CI, в Linux без дисплея или когда вы передаёте --no-browser. Откройте ссылку в браузере на любом устройстве и одобрите. Страница покажет код входа, который вы вставите в терминал.

Терминал
$ openemail login --no-browserOpen this link in a browser on any device to sign in:  https://api.openemail.uk/auth/mcp/authorize?response_type=code&client_id=…Paste the code from your browser
  • Код подходит только для того входа, который вывел ссылку, поэтому код из другой вкладки отклоняется.
  • Можно вставить и весь адрес, на котором остановился браузер.
  • Без терминала передайте код через stdin.

API-ключи

API-ключ выполняет вход скрипта без браузера, и код у него никогда не спрашивают. Создайте ключ в разделе «Настройки → API-ключи» (openemail open api-keys) только с теми scope, которые нужны скрипту. CLI проверяет ключ через GET /keys/self перед сохранением и принимает ключи oe_live_ и oe_test_. Почта, отправленная с тестовым ключом, никогда не доставляется.

Терминал
openemail login --with-token < ~/.config/openemail/keyecho "$OPENEMAIL_KEY" | openemail login --with-token --profile ciopenemail login --token oe_live_…

--token тоже работает, но ключ попадает в историю оболочки, поэтому CLI предупреждает и предлагает --with-token. Есть два способа использовать ключ, не сохраняя его:

  • OPENEMAIL_API_KEY в окружении использует каждая команда, которая его видит, раньше любого сохранённого профиля.
  • --api-key <key> используется для одной этой команды.

Если учётных данных несколько, побеждает первое из этого списка: --api-key, OPENEMAIL_API_KEY, профиль из --profile, профиль из OPENEMAIL_PROFILE, затем активный профиль.

Профили

Профиль это один сохранённый вход любого из двух видов. Первый называется default. Добавляйте другие через --profile и переключайтесь между ними:

Терминал
openemail login --profile workopenemail profile listopenemail profile use workopenemail inbox --profile defaultOPENEMAIL_PROFILE=work openemail statusopenemail profile currentopenemail profile remove work
  • profile list показывает каждый профиль с видом, рабочим пространством и пользователем или ключом и отмечает активный. Его JSON никогда не содержит токен или ключ.
  • profile current выводит в stdout только имя, поэтому $(openemail profile current) работает в скрипте.
  • profile remove <name> делает то же, что openemail logout --profile <name>.
  • Имя профиля длиной до 64 символов из букв, цифр, точек, дефисов и подчёркиваний.
  • profile use также называется profile switch. Если удалить активный профиль или выйти из него, активного профиля не останется, и следующая команда, которой нужен вход, подскажет openemail profile use <name>.

С каким API работает вход

Сохранённый профиль помнит API, в который он вошёл, и его учётные данные отправляются только туда. --base-url или OPENEMAIL_BASE_URL с другим адресом останавливает команду с кодом выхода 2 до любой отправки и объясняет, как войти по этому адресу отдельным профилем.

Терминал
openemail login --profile other --base-url https://api.example.comopenemail inbox --profile other
  • Ключ из OPENEMAIL_API_KEY или --api-key не сохранённый профиль, поэтому он уходит по адресу из --base-url или OPENEMAIL_BASE_URL, либо на https://api.openemail.uk, если не задано ни то ни другое.
  • Команды, которые не отправляют учётных данных, следуют --base-url и OPENEMAIL_BASE_URL, какой бы профиль ни был активен: одноразовые ящики, методы, которым не нужен ключ, docs и open.
  • Обычный http отклоняется для любого адреса, кроме localhost, 127.0.0.1 и ::1, с кодом выхода 2: для API, веб-приложения, запросов входа, токенов и отзыва, а также сервера MCP. Для всего остального используйте https.
  • Путь запроса, который вышел бы за пределы адреса API, например openemail api //example.com/x, останавливается с кодом выхода 2 и invalid_path до любой отправки.

Чего не может каждый вход

Вход через браузер действует от вашего имени, но некоторые вещи приложению не одобряются никогда, какой бы доступ вы ни выбрали:

  • Управление API-ключами. keys:write и keys:manage никогда не выдаются, поэтому для создания, ротации и отзыва ключей нужен API-ключ с keys:manage или веб-приложение. openemail me rotate ротирует ключ, которым вы вызываете, поэтому ему нужен API-ключ.
  • Оплата и сами рабочие пространства. Тарифы, счета, а также создание, переключение и удаление рабочего пространства остаются в веб-приложении.
  • Ваш бесплатный адрес. Приложение одобряется для рабочего пространства компании, а личное пространство с бесплатным адресом никогда не предлагается, по тому же правилу, что и в API.
  • Участники и роли, если одобрение не охватывает всё рабочее пространство. members:write и roles:write убираются из одобрения, ограниченного некоторыми доменами или адресами.

У API-ключа есть своё ограничение. ai compose, ai summarize и каждая команда openemail mcp, кроме config, идут через MCP-сервер, которому нужен вход через браузер, поэтому с ключом они завершаются с кодом выхода 4 и объясняют почему.

Коды подтверждения

При входе через браузер некоторые изменения сначала спрашивают код подтверждения, как в веб-приложении. CLI спрашивает его, когда он нужен: присылает на почту шестизначный код или, если включён двухфакторный вход, просит код из приложения-аутентификатора или один из резервных кодов. Когда код верен, команда выполняется, и у этого входа 60 минут больше ничего не спрашивают. У API-ключа код не спрашивают никогда.

КомандаПросит код
webhooks create, updateВсегда
rules create, updateВсегда
roles update, deleteВсегда
members add, update, removeВсегда
members grant-address, revoke-addressВсегда
domains delete, delete-addressВсегда
audiences deleteДля созданной вами аудитории
audiences emptyДля созданной вами аудитории, в которой ещё есть контакты
mcp call createRule, setRuleEnabledВсегда
mcp call removeDomain, removeDomainAddressВсегда
mcp call deleteAudience, emptyAudienceКак соответствующая команда для аудиторий
apiКогда вызываемая операция входит в список выше
Терминал
$ openemail webhooks create --url https://acme.com/hooks/openemailWe emailed a code to a•••@acme.com.Verification code: 482913Verified. You will not be asked again for 60 minutes.
  • Введите r в приглашении, чтобы письмо отправили снова. Неверный код сообщает, сколько попыток осталось.
  • После того как код принят, команда выполняется ещё один раз, никогда не дважды.
  • --yes подтверждает удаление, но никогда не пропускает код.
  • Без присмотра (с --json или --no-input, в CI или без терминала) ввести код некому, поэтому команда завершается с кодом выхода 4 и ничего не меняет.
  • Код даёт 5 попыток, а после пятой неверной CLI предлагает новый код. Каждый вход может запросить 5 кодов в час и 20 в день.
  • Десять неверных кодов для одного входа за 24 часа ставят его подтверждение на паузу. CLI тогда сообщает, когда оно возобновится, и останавливается с кодом выхода 4 и step_up_paused, не предлагая другой код, а письмо с объяснением называет приложение.

Запустите openemail verify, прежде чем скрипт или ИИ-клиент сделает что-то чувствительное. Она спросит код сейчас, и следующие 60 минут каждая команда этого профиля работает без него, включая openemail mcp call и локальный MCP-мост.

Терминал
openemail verifyopenemail verify --statusopenemail verify --status --jsonopenemail verify --force

60 минут принадлежат одному входу. Другой профиль или ИИ-клиент, вошедший сам, получит запрос собственного кода, а выход сразу их завершает. --force запрашивает новый код и начинает новые 60 минут.

Срок действия, выход и отзыв

  • Токен доступа за входом через браузер действует час. CLI обновляет его до истечения и сохраняет новый, так что вы этого не замечаете.
  • Каждый токен обновления срабатывает один раз. Старый токен, использованный больше чем через 30 секунд после того, как CLI его заменила, например из копии config.json на другой машине, заставляет сервер полностью отозвать этот вход. Поэтому входите на каждой машине, а не копируйте файл.
  • Одобрение действует столько, сколько вы выбрали на странице одобрения. Когда оно заканчивается или приложение удаляют в разделе «Аккаунт → Подключённые приложения», CLI больше не может действовать за вас и просит снова запустить openemail login.
  • openemail logout отзывает вход через браузер на сервере, что убирает его из подключённых приложений, а затем забывает его на этом устройстве, даже если сервер недоступен. --all выходит из каждого профиля.
  • Выход из API-ключа только забывает его здесь. Ключ продолжает работать, пока вы его не отзовёте через openemail keys revoke <id> или в веб-приложении.

Где хранятся входы

Всё лежит в ~/.openemail или в папке, которую указывает OPENEMAIL_CONFIG_DIR. Папку можете читать только вы (0700), как и каждый файл в ней (0600). Каждый файл пишется во временный файл и переименовывается на место, поэтому сбой никогда не оставит половину файла, а каждое изменение делается под файлом блокировки, поэтому команды, запущенные одновременно, никогда не теряют профиль.

ФайлЧто в нём
config.jsonВаши профили: API-ключи, токены доступа и обновления и какой профиль активен
temp-mail.jsonОдноразовые ящики, созданные этой CLI, с их токенами ящиков
update-check.jsonКогда npm в последний раз спрашивали о новом выпуске и что он ответил

Токены и ключи хранятся открытым текстом в файлах, которые может читать только ваш пользователь, поэтому относитесь к папке как к SSH-ключу. Файл, который CLI не может разобрать, никогда молча не считается выходом: она один раз предупреждает с путём и сохраняет рядом копию (config.json.bak), прежде чем записать новый. Файл, который она вообще не может прочитать, например из-за его прав доступа, останавливает команду с ошибкой, где он назван.

Ваши входящие,
на ваших условиях.

Почтовая инфраструктура для бизнеса, ИИ, агентов и личной почты. Создана для масштаба, приватности и контроля. Всё, что должно было быть в почте с первого дня.

OpenEmail

Почтовая инфраструктура для бизнеса, ИИ, агентов и личной почты. Создана для масштаба, приватности и контроля. Всё, что должно было быть в почте с первого дня.

© 2026 OpenEmail. Все права защищены.