Aller à la documentation
CLI

Scripts

Sortie JSON, flux, codes de sortie, variables d'environnement, et exécution sans surveillance ou en CI.

Sortie JSON

Avec --json, stdout ne contient que du JSON, indenté de deux espaces, tandis que les notes et la progression restent sur stderr, et rien ne demande de saisie. Une liste affiche { items, hasMore, nextCursor }, un objet de l'API s'affiche tel que l'API l'a renvoyé, et une commande écrite à la main affiche l'objet que décrit son aide.

Terminal
openemail whoami --json | jq -r .workspaceIdopenemail emails list --status failed --json | jq -r ".items[].id"

Une erreur part sur stderr en une seule ligne de JSON, et le code de sortie est celui qu'obtiendrait une personne :

stderr
{"error":{"type":"permission_error","code":"insufficient_scope","message":"This API key does not have the domains:write scope.","hint":"The credential is missing a scope this call needs. Use a key that has it, or sign in again with openemail login.","next":null,"status":403,"requestId":"req_7Hc2kQ","param":null,"docUrl":"https://openemail.uk/docs/api/errors#insufficient_scope","exitCode":4}}
ChampCe qu'il contient
typeLe type d'erreur de l'API, ou cli_error, network_error ou internal_error pour un échec dans la CLI
codeUn code stable comme insufficient_scope, not_signed_in ou unknown_flag
messageCe qui s'est mal passé, en une phrase
hint, nextCe qu'il faut essayer, et la commande à lancer ensuite, ou null
status, requestId, param, docUrlFournis par l'API quand l'erreur vient d'elle, sinon null
exitCodeLe code de sortie avec lequel le processus se termine

Flux

Certaines sorties sont un flux d'objets JSON, un par ligne, pour qu'un pipeline traite chaque élément dès son arrivée :

  • Une liste de ressources avec --all quand stdout n'est pas un terminal, ou avec --ndjson. --max <n> s'arrête après autant d'éléments.
  • openemail temp watch --json, une ligne par nouveau message.
  • openemail mcp serve, un message JSON-RPC par ligne dans chaque sens.
Terminal
openemail contacts list --all > contacts.ndjsonopenemail emails list --status failed --all --max 500 | jq -r .id

Codes de sortie

CodeSignification
0Terminé
1Un échec inattendu, une erreur du serveur ou un envoi en échec
2Une erreur d'utilisation : un argument incorrect, une commande ou une option inconnue, une valeur ou une confirmation qui n'a pas pu être demandée, ou une origine ou un chemin vers lequel la CLI n'enverra pas d'identifiant
3Non connecté, ou la connexion a été refusée, a expiré ou a été déconnectée pendant l'exécution de la commande
4Non autorisé : un scope ou une permission manquante, un code de vérification qui n'a pas pu être demandé ou qui est en pause, ou une clé API là où une connexion par navigateur est nécessaire
5Introuvable
6Un conflit avec l'état actuel
7L'entrée n'était pas valide
8Débit limité, ou l'allocation d'IA est épuisée
9Le réseau a échoué ou a dépassé le délai
10Annulé : vous avez refusé une confirmation ou une invite
130, 143Arrêté par Ctrl+C, ou par SIGTERM

Variables d'environnement

VariableCe qu'il fait
OPENEMAIL_API_KEYUne clé API à utiliser à la place de tout profil enregistré
OPENEMAIL_PROFILELe profil enregistré à utiliser
OPENEMAIL_BASE_URLL'origine de l'API pour OPENEMAIL_API_KEY, --api-key et les commandes qui n'envoient aucun identifiant. Une connexion enregistrée ne va jamais qu'à l'API à laquelle elle s'est connectée
OPENEMAIL_APP_URLL'origine de l'application web, pour la connexion, open et les liens vers la documentation
OPENEMAIL_CONFIG_DIROù sont conservés les profils et les jetons de boîte, ~/.openemail si elle n'est pas définie
OPENEMAIL_NO_UPDATE_CHECKNe jamais chercher de version plus récente sur npm. OPENEMAIL_DISABLE_UPDATE_NOTICE fait de même
NO_COLOR, FORCE_COLOR=0Pas de couleur
CINe jamais demander, ne jamais ouvrir de navigateur, ne jamais chercher de mise à jour. La plupart des services de CI sont reconnus sans elle
VISUAL, EDITORL'éditeur que send et reply ouvrent pour un corps

Exécutions sans surveillance

La CLI ne demande rien que si stdin et stdout sont tous deux des terminaux, et qu'aucun de --json, --no-input ou CI ne s'applique. Sinon :

  • Une valeur obligatoire manquante s'arrête avec le code de sortie 2 et nomme l'option à passer.
  • Une commande destructrice s'arrête avec Refusing to run unattended. Pass --yes to confirm. et le code de sortie 2, sauf si vous passez --yes.
  • Un changement qui exige un code de vérification s'arrête avec le code de sortie 4, car personne ne peut le taper. Utilisez une clé API, ou lancez d'abord openemail verify.

En CI

Donnez au job une clé API avec seulement les scopes nécessaires, gardez-la dans un secret, et laissez OPENEMAIL_API_KEY la porter. Rien n'est enregistré, rien ne demande de saisie, et aucune vérification de mise à jour ne s'exécute.

.github/workflows/deploy.yml
- name: Tell the team  env:    OPENEMAIL_API_KEY: ${{ secrets.OPENEMAIL_API_KEY }}  run: |    npx -y @openemail/[email protected] send \      --from [email protected] \      --to [email protected] \      --subject "Deployed ${{ github.sha }}" \      --text "Build ${{ github.run_number }} is live." \      --idempotency-key "deploy-${{ github.run_id }}"
Attendre un e-mail d'inscription
ADDRESS=$(npx -y @openemail/[email protected] temp new --ttl 15)./signup-test.sh "$ADDRESS"npx -y @openemail/[email protected] temp watch --first --json | jq -r .snippetnpx -y @openemail/[email protected] temp delete --yes
Échouer sur les envois en échec
failed=$(openemail emails list --status failed --json | jq ".items | length")test "$failed" -eq 0

Passez --idempotency-key sur un envoi qu'un pipeline peut réessayer, et dérivez-la de ce qui a rendu l'envoi nécessaire, comme un identifiant d'exécution. Relancer l'étape renvoie alors le premier envoi au lieu d'envoyer deux fois.

Votre boîte de réception,
à vos conditions.

L’infrastructure e-mail pour les entreprises, l’IA, les agents et le courrier personnel. Conçue pour l’échelle, la confidentialité et le contrôle. Tout ce que l’e-mail aurait dû avoir dès le premier jour.

OpenEmail

L’infrastructure e-mail pour les entreprises, l’IA, les agents et le courrier personnel. Conçue pour l’échelle, la confidentialité et le contrôle. Tout ce que l’e-mail aurait dû avoir dès le premier jour.

© 2026 OpenEmail. Tous droits réservés.