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.
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 :
{"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}}| Champ | Ce qu'il contient |
|---|---|
| type | Le type d'erreur de l'API, ou cli_error, network_error ou internal_error pour un échec dans la CLI |
| code | Un code stable comme insufficient_scope, not_signed_in ou unknown_flag |
| message | Ce qui s'est mal passé, en une phrase |
| hint, next | Ce qu'il faut essayer, et la commande à lancer ensuite, ou null |
| status, requestId, param, docUrl | Fournis par l'API quand l'erreur vient d'elle, sinon null |
| exitCode | Le 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
--allquand 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.
openemail contacts list --all > contacts.ndjsonopenemail emails list --status failed --all --max 500 | jq -r .idCodes de sortie
| Code | Signification |
|---|---|
| 0 | Terminé |
| 1 | Un échec inattendu, une erreur du serveur ou un envoi en échec |
| 2 | Une 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 |
| 3 | Non connecté, ou la connexion a été refusée, a expiré ou a été déconnectée pendant l'exécution de la commande |
| 4 | Non 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 |
| 5 | Introuvable |
| 6 | Un conflit avec l'état actuel |
| 7 | L'entrée n'était pas valide |
| 8 | Débit limité, ou l'allocation d'IA est épuisée |
| 9 | Le réseau a échoué ou a dépassé le délai |
| 10 | Annulé : vous avez refusé une confirmation ou une invite |
| 130, 143 | Arrêté par Ctrl+C, ou par SIGTERM |
Variables d'environnement
| Variable | Ce qu'il fait |
|---|---|
| OPENEMAIL_API_KEY | Une clé API à utiliser à la place de tout profil enregistré |
| OPENEMAIL_PROFILE | Le profil enregistré à utiliser |
| OPENEMAIL_BASE_URL | L'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_URL | L'origine de l'application web, pour la connexion, open et les liens vers la documentation |
| OPENEMAIL_CONFIG_DIR | Où sont conservés les profils et les jetons de boîte, ~/.openemail si elle n'est pas définie |
| OPENEMAIL_NO_UPDATE_CHECK | Ne jamais chercher de version plus récente sur npm. OPENEMAIL_DISABLE_UPDATE_NOTICE fait de même |
| NO_COLOR, FORCE_COLOR=0 | Pas de couleur |
| CI | Ne jamais demander, ne jamais ouvrir de navigateur, ne jamais chercher de mise à jour. La plupart des services de CI sont reconnus sans elle |
| VISUAL, EDITOR | L'é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
2et nomme l'option à passer. - Une commande destructrice s'arrête avec
Refusing to run unattended. Pass --yes to confirm.et le code de sortie2, 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'abordopenemail 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.
- 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 }}"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 --yesfailed=$(openemail emails list --status failed --json | jq ".items | length")test "$failed" -eq 0Passez --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.