Clés, membres et rôles
Gérez les clés API et lisez ce qu'elles ont fait, invitez et gérez des membres, écrivez des rôles, vérifiez l'identifiant que vous utilisez et créez des boîtes jetables.
Vue d'ensemble
Ces commandes décident qui et quoi peut atteindre l'espace de travail. openemail keys gère les clés API et lit ce que chacune a fait, openemail members gère les personnes de l'espace de travail et leurs invitations, et openemail roles définit ce qu'un membre ou une clé peut faire. openemail me décrit la clé ou la connexion avec laquelle vous appelez, et openemail languages liste les langues qu'accepte un envoi traduit. Les boîtes jetables n'ont besoin d'aucune connexion : openemail temp est la façon courante d'en utiliser une, et openemail temp-mail couvre chaque appel de l'API qui se trouve derrière. openemail api atteint tout point de terminaison que les autres commandes n'atteignent pas.
- Une commande de clé prend l'identifiant de la clé, les 24 caractères hexadécimaux après
oe_live_, tel quekeys listl'affiche. Une commande de membre prend l'identifiant du compte,userIddansmembers list, jamais une adresse e-mail. Une commande de rôle prend un identifiantrole_venant deroles list, car les rôles ne se recherchent pas par nom. - Les espaces de noms répondent aussi à
key,member,role,languageettempMail. Les alias de verbe habituels fonctionnent, commels,show,new,editetrm. Dansmembers, dont les verbes sontaddetremove,newetcreatemènent àadd, etrm,deletdeletemènent àremove. openemail <command> --helpliste chaque argument et option avec son type, le scope dont l'appel a besoin, sa méthode et son chemin, et ce qui revient. Ajoutez--jsonpour obtenir la même page sous forme de données.
Toutes les commandes
| Commande | Ce qu'il fait |
|---|---|
| openemail me get | Décrire la clé API ou la connexion par navigateur avec laquelle vous appelez : ses scopes, le rôle qui la plafonne, son espace de travail et sous quelles adresses elle peut envoyer. Ne demande aucun scope |
| openemail me ping | Vérifier que l'identifiant s'authentifie, pour un contrôle de santé. Ne demande aucun scope |
| openemail me rotate | Donner un nouveau secret à la clé API avec laquelle vous appelez, affiché une seule fois. Demande confirmation |
| openemail keys list | Lister les clés API de l'espace de travail, de la plus récente à la plus ancienne, avec le statut, les scopes, le rôle, la portée d'envoi et la dernière utilisation. Jamais de secret |
| openemail keys get <id> | Lire une clé, sans son secret |
| openemail keys create --name <value> | Créer une clé et recevoir son secret une seule fois, dans token |
| openemail keys update <id> | Renommer une clé, remplacer ses scopes ou sa portée d'envoi, ou la désactiver et la réactiver avec --no-enabled et --enabled |
| openemail keys delete <id> | Retirer une clé révoquée de la liste, en gardant son historique. Demande confirmation |
| openemail keys rotate <id> | Donner un nouveau secret à une clé, affiché une seule fois, et arrêter aussitôt l'ancien. Demande confirmation |
| openemail keys revoke <id> | Révoquer définitivement une clé, avec une --reason facultative. Demande confirmation |
| openemail keys list-requests <id> | Lire le journal des requêtes d'une clé : méthode, chemin, statut, code d'erreur, durée, IP et agent utilisateur |
| openemail keys list-activity <id> | Lire ce qui est arrivé à une clé : création, modification, rotation, désactivation et réactivation, révocation, suppression, et chaque appel refusé |
| openemail keys list-workspace-requests | Lire le journal des requêtes de chaque clé que vous pouvez voir, ou de celles que nomme --key-ids |
| openemail keys list-workspace-activity | Lire ce qui est arrivé à chaque clé que vous pouvez voir, ou à celles que nomme --key-ids |
| openemail roles list | Lister les rôles de l'espace de travail, les rôles initiaux d'abord, avec le nombre de membres et de clés qui détiennent chacun |
| openemail roles get <id> | Lire un rôle avec ses permissions et ses décomptes d'utilisation en direct |
| openemail roles create --name <value> --permissions <a,b> | Créer un rôle personnalisé, avec une --description facultative |
| openemail roles update <id> | Renommer un rôle, modifier sa description, ou remplacer toute sa liste de permissions |
| openemail roles delete <id> | Supprimer un rôle et déplacer ceux qui le détiennent vers le rôle de --reassign-to. Demande confirmation |
| openemail roles list-permissions | Lister le vocabulaire des permissions, avec un libellé, un groupe et si une clé peut détenir chacune |
| openemail members list | Lister toutes les personnes qui ont accès, le propriétaire d'abord, avec leur rôle, leurs permissions et les adresses et domaines que chacune peut utiliser |
| openemail members get <user-id> | Lire un membre par identifiant de compte |
| openemail members add --email <value> --role-id <value> | Inviter quelqu'un avec un rôle, et avec des adresses ou des domaines entiers via --address-ids, --domain-ids et --access |
| openemail members update <user-id> --role-id <value> | Faire passer un membre à un autre rôle. Ses accès aux adresses et aux domaines restent tels quels |
| openemail members remove <user-id> | Retirer quelqu'un de l'espace de travail avec chaque accès à une adresse qu'il détient. Demande confirmation |
| openemail members grant-address <user-id> --address-id <value> | Donner une adresse à un membre, ou changer son --access à celle-ci |
| openemail members revoke-address <user-id> <address-id> | Reprendre une adresse à un membre. Demande confirmation |
| openemail members list-invitations | Lister les invitations que personne n'a encore acceptées, expirées comprises |
| openemail members revoke-invitation <invitation-id> | Retirer une invitation, pour que son lien cesse de fonctionner. Demande confirmation |
| openemail members resend-invitation <invitation-id> | Renvoyer une invitation, avec un nouveau lien et 14 jours de plus |
| openemail languages list | Lister chaque langue qu'accepte un envoi traduit, dans l'ordre où un sélecteur devrait les montrer. Ne demande aucun scope |
| openemail temp new [--name <local-part>] [--domain <domain>] [--ttl <minutes>] | Créer une boîte jetable et n'afficher que son adresse. Ne demande aucune connexion |
| openemail temp list | Lister les boîtes jetables créées par cette CLI, sans interroger le réseau |
| openemail temp read [inbox] [message-id] | Lister le courrier d'une boîte, ou afficher un message sous forme de texte lisible |
| openemail temp watch [inbox] [--first] | Afficher chaque nouveau message dès son arrivée, en vérifiant toutes les 3 secondes |
| openemail temp delete [inbox] [--yes] | Supprimer maintenant une boîte et son courrier, et oublier son jeton. Demande confirmation |
| openemail temp-mail list-domains | Lister les domaines sur lesquels une boîte jetable peut être créée. Ne demande aucun identifiant |
| openemail temp-mail create | Créer une boîte jetable et son jeton de boîte, que la CLI enregistre. Ne demande aucun identifiant |
| openemail temp-mail get <inbox-id> | Lire l'expiration d'une boîte, les prolongations restantes et le nombre de messages |
| openemail temp-mail extend <inbox-id> | Repousser l'expiration d'une heure au plus, dans les 24 heures suivant la création de la boîte |
| openemail temp-mail delete <inbox-id> | Détruire maintenant une boîte et son courrier. Demande confirmation |
| openemail temp-mail list-messages <inbox-id> | Lister une page des messages, du plus récent au plus ancien, chacun avec un court extrait en texte brut |
| openemail temp-mail get-message <inbox-id> <message-id> | Lire un message avec son corps stocké, et le marquer comme vu |
| openemail temp-mail delete-message <inbox-id> <message-id> | Supprimer un message avec son corps et ses pièces jointes. Demande confirmation |
| openemail temp-mail list-attachments <inbox-id> <message-id> | Lire les pièces jointes d'un message, avec leurs octets en base64 |
| openemail api <method> <path> | Appeler n'importe quel point de terminaison REST avec votre connexion, ses codes de vérification et ses confirmations |
Chaque option figure dans l'aide de sa commande, par exemple openemail keys create --help, openemail members add --help ou openemail temp new --help.
Clés API
Lire les clés demande keys:read, et chaque changement demande keys:manage. Une connexion par navigateur ne reçoit jamais keys:write ni keys:manage, donc créer, modifier, faire tourner, révoquer et supprimer des clés exige une clé API qui détient keys:manage, ou l'application web (openemail open api-keys). Une connexion par navigateur avec keys:read ne lit les clés que pour le propriétaire de l'espace de travail, et la connexion d'un membre est refusée avec 403 owner_only.
keys create,keys rotateetme rotateaffichent le secret de la clé, danstoken, une seule fois, et la CLI avertit ensuite qu'il ne sera plus jamais montré. Chaque lecture montremaskedKeyà la place.- Sans précision, une nouvelle clé ne détient que
emails:send, et prend le rôle, la portée d'envoi et l'expiration de la clé qui la crée.--domain-allowlistet--address-allowlistfixent sous quelles adresses elle peut envoyer, et--expires-in-minutesprend de 5 à 5 256 000, soit dix ans. - Une clé ne crée ni n'atteint jamais une clé plus large qu'elle-même. Les scopes, le rôle, l'expiration, le mode et la portée d'envoi doivent tous tenir dans la clé appelante, sinon l'appel est refusé avec 403
beyond_caller_authority, etparamnomme ce qui était trop large. Une clé restreinte à certains domaines ou adresses ne voit que les clés comprises dans sa propre portée d'envoi, et toute autre donne un 404. keys updateremplace ce que vous envoyez :--scopes,--address-allowlistet--domain-allowlistprennent chacune toute la nouvelle liste, et une option omise reste telle quelle.--no-enableddésactive une clé, si bien que chaque appel avec elle est refusé avecinactive_api_key, et--enabledla rétablit à l'identique. C'est ainsi qu'on arrête une clé de façon réversible.keys revokeest définitif : la clé ne peut plus jamais être réactivée, tournée ni modifiée.keys deletene retire qu'une clé révoquée, et toute autre est refusée avec 409not_revoked. Le journal des requêtes et l'activité d'une clé supprimée restent, sous Deleted key.keys rotaten'a pas de fenêtre de chevauchement, donc l'ancien secret cesse de fonctionner au moment où le nouveau revient. Quand la clé est celle qu'utilise votre profil enregistré, la CLI enregistre le nouveau secret dans ce profil, pour qu'il continue de fonctionner. Une clé venant deOPENEMAIL_API_KEYou de--api-keyne peut pas être enregistrée, donc la CLI vous dit de stocker le nouveau jeton là où l'ancienne clé était conservée.
Le journal des requêtes enregistre chaque appel qu'une clé a fait : méthode, chemin, statut, code d'erreur, durée, IP et agent utilisateur, jamais un corps ni une chaîne de requête. Rien n'est purgé, il remonte donc jusqu'au premier appel d'une clé, et les appels faits avec une connexion par navigateur n'y figurent pas. Le journal d'activité enregistre chaque changement apporté à une clé, et chaque appel qui a présenté la clé et a été refusé, sous auth_failed, avec l'auteur de chaque changement dans actor.
list-requestsetlist-activitylisent une clé.list-workspace-requestsetlist-workspace-activitylisent chaque clé que vous pouvez voir, ou jusqu'à 50 que nomme--key-ids, clés supprimées comprises.--sinceet--untilgardent une période et prennent une heure ISO 8601 comme2026-09-01T00:00:00Z.--failed-onlygarde les appels auxquels on a répondu avec un statut de 400 ou plus.
Votre identifiant, et les langues
openemail me get est la première commande à lancer quand un appel est refusé. Elle ne demande aucun scope, donc toute clé ou connexion valide peut se décrire elle-même.
scopesest ce que l'identifiant peut faire en ce moment : les scopes avec lesquels il a été créé, réduits par le rôle sous lequel il a été émis, recalculés à chaque requête.grantedScopesest ce avec quoi il a été créé, etroleIdnomme le rôle. Un scope présent dansgrantedScopeset absent descopesa été retiré par le rôle. C'est la raison habituelle d'un 403insufficient_scopesur une clé qui semble détenir le scope, et la solution est de modifier le rôle plutôt que de créer une autre clé.domainAllowlistetaddressAllowlistindiquent sous quelles adresses il peut envoyer. Les deux à null signifient n'importe quelle adresse que possède l'espace de travail.- Avec une connexion par navigateur, elle décrit la connexion :
objectvautoauth_token,clientIdnomme l'application connectée de cette CLI, etexpiresAtest la date de fin de votre approbation, ou null quand elle ne prend jamais fin. me pingrépondok: trueavec le même détail des scopes mais sans les listes d'autorisation, ce qui convient à un contrôle de santé. Une clé révoquée, expirée, désactivée ou mal tapée échoue avec un 401 et le code de sortie3.me rotatedonne un nouveau secret à la clé avec laquelle vous appelez. Elle demandekeys:write, qu'une connexion par navigateur ne détient jamais, il lui faut donc une clé API. Tout le reste de la clé demeure, l'ancien secret cesse aussitôt de fonctionner, et un profil enregistré reçoit le nouveau, comme aveckeys rotate. Une réponse perdue peut laisser la clé avec un secret que personne n'a vu, et elle a alors besoin d'un nouveau secret depuis l'application web.openemail whoamimontre la même réponse mise en forme pour des personnes.
openemail languages list affiche toute la table des langues en une réponse, environ deux cents lignes, avec le code de chaque langue, son nom anglais, son nom propre, son drapeau et si elle s'écrit de droite à gauche. Le code, le nom anglais ou le nom propre fonctionnent tous comme cible d'un envoi traduit. Elle demande une connexion mais aucun scope. openemail ai languages affiche la même table avec une option --search, et sans connexion elle affiche la table intégrée à la CLI.
Membres et rôles
Un membre détient deux choses qui ne sont jamais fusionnées. Son rôle dit ce qu'il peut faire, et ses accès aux adresses et aux domaines disent sur quel courrier il peut le faire, chaque accès avec son propre niveau : member lit et envoie, et viewer ne fait que lire. Un envoi a besoin des deux, donc un rôle avec emails:send et un accès viewer à une adresse ne permettent toujours pas d'envoyer depuis celle-ci. Un domaine entier couvre chaque adresse qu'il porte, y compris celles créées plus tard.
members listplace le propriétaire de l'espace de travail en premier, marquéisOwner, laissez donc cette ligne de côté pour compter les places. Le propriétaire détient toutes les permissions et ne peut être ni invité, ni modifié, ni retiré, et personne qui est déjà dans l'espace de travail ne peut non plus être invité à nouveau : les deux donnent 422member_is_owner.- Les personnes qui détiennent des accès à des adresses sans avoir jamais reçu de rôle reviennent avec
implied: true, et leur rôle est déduit de leurs accès.members updateleur en donne un véritable. members addenvoie une invitation, même à quelqu'un qui a déjà un compte. Rien n'est accordé avant l'acceptation, puis exactement le rôle, les adresses et les domaines que porte l'invitation. Inviter à nouveau la même adresse dans les dix minutes donne 409invitation_too_soon, et après cela l'invitation en attente est rafraîchie au lieu d'en envoyer une seconde.resend-invitationenvoie un nouveau lien valable 14 jours de plus et retire l'ancien, ce qui renouvelle aussi une invitation expirée.revoke-invitationen retire une, et une invitation déjà acceptée donne 409invitation_accepted, retirez donc plutôt le membre.members updatechange le rôle et rien d'autre.grant-addressdonne une adresse ou change l'accès à celle-ci, donc la relancer avec un autre--accessmodifie l'accès au lieu d'en ajouter un second.revoke-addressreprend une adresse et laisse le reste. Révoquer le dernier accès d'un membre implicite le retire de l'espace de travail.members removemet fin à l'accès de quelqu'un à l'espace de travail, à son appartenance et à chaque accès, et indique dansaddressesRevokedcombien d'accès à des adresses ont disparu. Son compte et le courrier qu'il a envoyé restent intacts.
Un rôle est aussi un plafond pour les clés API émises sous lui. Ce qu'une clé peut faire, ce sont ses propres scopes réduits par les permissions de son rôle, recalculés à chaque requête.
roles listmontre d'abord les rôles initiaux, dans l'ordre Owner, Admin, Member, Viewer, Developer et Billing, puis les rôles personnalisés par nom. Un espace de travail contient jusqu'à 24 rôles personnalisés, et au-delàroles createdonne 422role_limit_reached.- Un rôle stocke les permissions qu'impliquent ses permissions, donc
templates:writestocke aussitemplates:read, etroles:writeapporteroles:readetmembers:read. Relisez la liste dans la réponse plutôt que de la supposer. roles update --permissionsremplace toute la liste, lisez donc le rôle, modifiez la liste et envoyez-la en entier.--description nullefface la note. Un changement s'applique dès le prochain appel de chaque membre et de chaque clé qui détient le rôle.- Tous les rôles sauf Owner peuvent être renommés, réécrits et supprimés, rôles initiaux compris, et un rôle initial supprimé ne revient pas. Le rôle Owner répond à une modification par 409
role_immutableet à une suppression par 409role_undeletable. - Tant qu'un membre, une clé API ou une invitation en attente détient un rôle,
roles deleteexige--reassign-toavec le rôle qui les reprend, sinon elle est refusée avec 409role_in_use. Les clés révoquées pointent toujours vers leur rôle, donc un rôle dont le décompteapiKeysvaut 0 peut quand même l'exiger. La réponse indique les personnesreassignedet les cléskeysReassigned. roles list-permissionsliste tout le vocabulaire avec un libellé et un groupe pour chaque entrée. Quelques-unes, commebilling:writeetworkspace:manage, reviennent avecscope: false: un rôle peut les détenir, mais aucune clé.
Une clé qui détient roles:write peut modifier le rôle qui la plafonne et s'élargir elle-même dès son appel suivant, gardez donc ce scope à l'écart des clés qui n'ont besoin que de lire. Avec une connexion par navigateur, members:write et roles:write ne sont accordés que quand l'approbation couvre tout l'espace de travail plutôt que certains domaines ou adresses.
Boîtes jetables
Une boîte jetable n'a besoin ni de compte ni de connexion. On l'atteint avec son propre jeton de boîte, qui commence par oe_inbox_ et revient une seule fois, à la création de la boîte. Utilisez openemail temp au quotidien, et openemail temp-mail quand il vous faut un champ ou une étape que temp ne montre pas, comme les prolongations restantes, une prolongation, ou les octets d'une pièce jointe.
- Les deux gardent le jeton dans
~/.openemail/temp-mail.json, lisible par vous seul.temp newettemp-mail createl'enregistrent,temp listmontre les boîtes créées par l'une ou l'autre voie, et les deux suppressions l'oublient. Une boîte enregistrée peut être désignée par son adresse partout où une commande demande son identifiant. - Pour une boîte que cette CLI n'a pas créée, passez le jeton avec
--inbox-token. Sans jeton enregistré ni passé, la commande s'arrête avec le code de sortie3avant tout envoi. - Les deux commandes de création nomment leurs options différemment :
temp newprend--name,--domainet--ttl, ettemp-mail createprend--local-part,--domainet--ttl-minutes. Une partie locale compte de 3 à 32 lettres, chiffres, points, tirets ou tirets bas, commence et finit par une lettre ou un chiffre, et des noms commepostmastersont refusés. La durée de location va de 1 à 1440 minutes, 60 par défaut. - Chaque adresse IP peut créer 6 boîtes par heure et 30 par jour, et la suivante donne 429
too_many_inboxes, code de sortie8. Prolonger une boîte que vous détenez déjà ne compte pas, donctemp-mail extendest la réponse à cette limite. temp-mail extendajoute jusqu'à une heure, jamais au-delà de 24 heures après la création de la boîte, et au plus 23 fois. LisezextensionsLeftdans la réponse. À 0, c'est 409extension_limitpour de bon.temp-mail list-messageslit de 1 à 50 messages par page, 50 par défaut, chacun avec unsnippeten texte brut de jusqu'à 400 caractères qui contient souvent un code à usage unique. Rien au-delà d'une page n'est perdu, et--allparcourt chaque page.- Lire un message avec
temp read,temp-mail get-messageoutemp-mail list-attachmentsle marque comme vu. Un corps de plus de 2 Mo est tronqué, ce qu'indiquetruncated, et une pièce jointe de plus de 8 Mo n'a jamais été conservée, soncontentvaut donc null. - Supprimer une boîte supprime aussitôt son courrier, mais l'adresse reste réservée jusqu'à 7 jours après la fin prévue de sa location, et la redemander avant donne 409
address_taken.
Le courrier d'une boîte jetable vient d'inconnus, à une adresse que n'importe qui pourrait nommer. Son expéditeur n'est jamais vérifié et rien n'y est analysé, traitez donc ses liens, son HTML et ses pièces jointes avec prudence.
N'importe quel point de terminaison, et l'espace de noms security
openemail api <method> <path> envoie une requête par le même transport que toutes les autres commandes, donc votre profil ou votre clé, le renouvellement du jeton, les codes de vérification et les confirmations s'appliquent tous. Un chemin seul est un GET, et une réponse JSON s'affiche mise en forme. openemail api /keys/self est l'appel derrière me get.
-d,--dataprend le corps en JSON en ligne, depuis un fichier avec@path, ou depuis stdin avec-.-q,--queryet-H,--headerprennentkey=valueet peuvent être répétées, et-o,--outenregistre la réponse telle quelle dans un fichier.- Un
DELETE, et tout appel qu'une commande de ressource ferait confirmer, comme révoquer ou faire tourner une clé, demande d'abord confirmation, et sans surveillance il exige--yes. - Une requête en échec affiche l'erreur de l'API et sort avec le code correspondant.
L'espace de noms security n'est pas listé dans openemail --help, parce que openemail verify le pilote. Ses verbes step-up-status, begin-step-up et verify-step-up sont les appels que fait verify : verify --status lit l'état, et verify demande un code, vous invite à le saisir et le vérifie. Ils existent pour une connexion par navigateur. Avec une clé API, chacun est refusé avec 400 step_up_not_applicable, et openemail verify indique qu'une clé n'a jamais besoin de code.
Exemples
openemail keys create --name 'Billing sender' --scopes emails:send \ --domain-allowlist billing.acme.com --expires-in-minutes 129600 --json \ | jq -r .token | openemail login --with-token --profile billingopenemail whoami --profile billingLancez-le avec une clé API qui détient keys:manage, par exemple via OPENEMAIL_API_KEY. Le secret passe directement de la réponse à un nouveau profil, sans jamais apparaître à l'écran ni dans un fichier. La clé ne peut envoyer que depuis billing.acme.com, et elle expire dans 90 jours.
openemail keys list --all | jq -r 'select(.status != "active") | [.name, .status, .lastUsedAt] | @tsv'openemail keys list-workspace-requests --failed-only --since 2026-09-26T00:00:00Z --all \ | jq -r '[.createdAt, .keyName, .status, .errorCode, .method, .path] | @tsv'id=4c1b257a66287fd113bd89d0openemail keys update "$id" --no-enabledopenemail keys list-activity "$id" --since 2026-09-27T00:00:00Z --all | jq -r 'select(.type == "auth_failed") | .createdAt'openemail keys revoke "$id" --reason 'Contractor offboarded' --yesopenemail keys delete "$id" --yesDésactiver d'abord la clé peut être annulé avec --enabled. Chaque appel qui la présente encore est refusé et apparaît dans son activité sous auth_failed, ce qui vous montre ce qui dépend encore d'elle. La révocation ne peut pas être annulée, et seule une clé révoquée peut être supprimée.
openemail roles list-permissions --json | jq -r '.[] | [.group, .id, .label] | @tsv'role=$(openemail roles create --name Support --permissions threads:write,emails:send,templates:read \ --description 'Answers help@ and nothing else.' --json | jq -r .id)openemail members add --email [email protected] --role-id "$role" \ --domain-ids 93542ff8-2baa-4f2f-841d-5ceaa074ab0d --access memberopenemail members list-invitationsLe rôle revient en détenant aussi threads:read et emails:read, parce que les permissions qu'il nomme les impliquent. Sam ne reçoit le rôle et le domaine entier qu'une fois l'invitation acceptée. Avec une connexion par navigateur, members add demande d'abord un code de vérification.
old=role_8b1f4c2e9a7d3b60e5f1a2c4new=role_2c7e9a1f4b8d3e60c5a7f1b9user=$(openemail members list --all | jq -r 'select(.email == "[email protected]") | .userId')openemail members update "$user" --role-id "$new"openemail roles get "$old" --json | jq '{name, members, apiKeys}'openemail roles delete "$old" --reassign-to "$new" --dry-runopenemail roles delete "$old" --reassign-to "$new" --yesmembers et apiKeys sont comptés au moment où vous le demandez, ils montrent donc ce que la suppression va déplacer. La simulation affiche le DELETE avec reassignTo dans sa requête sans l'envoyer. Avec une connexion par navigateur, la mise à jour et la suppression demandent chacune un code de vérification, lancez donc d'abord openemail verify quand un script fait cela.
address=$(openemail temp new --ttl 15)openemail send --from [email protected] --to "$address" --subject 'Delivery check' --text 'Your code is 482913' --yesopenemail temp watch "$address" --first --json | jq -r .snippet | grep -oE '[0-9]{6}'openemail temp delete "$address" --yestemp new n'affiche que l'adresse, elle tient donc dans une variable du shell, et temp watch --first s'arrête au premier message. Pointez un formulaire d'inscription vers l'adresse au lieu de openemail send pour intercepter son code de confirmation de la même façon.
Scopes, confirmations et erreurs
| Scope | Commandes |
|---|---|
| keys:read | keys list, get, list-requests, list-activity, list-workspace-requests, list-workspace-activity |
| keys:manage | keys create, update, delete, rotate, revoke |
| keys:write | me rotate |
| roles:read | roles list, get, list-permissions |
| roles:write | roles create, update, delete |
| members:read | members list, get, list-invitations |
| members:write | members add, update, remove, grant-address, revoke-address, revoke-invitation, resend-invitation |
| Aucun, avec n'importe quelle clé ou connexion | me get, me ping, languages list |
| Aucun, et aucune connexion | temp, temp-mail list-domains et create. Les autres commandes temp-mail prennent le jeton de boîte |
- Une connexion ou une clé sans le scope s'arrête avec le code de sortie
4, nomme le scope manquant et explique comment l'obtenir. - Celles-ci demandent confirmation :
keys delete,rotateetrevoke,me rotate,roles delete,members remove,revoke-addressetrevoke-invitation,temp delete, ainsi quetemp-mail deleteetdelete-message. Répondre non sort avec le code10et ne change rien. Sans surveillance et sans--yes, elles s'arrêtent avec le code de sortie2avant tout envoi. - Avec une connexion par navigateur,
roles updateetroles delete, ainsi quemembers add,update,remove,grant-addressetrevoke-address, demandent aussi un code de vérification, sauf si cette connexion en a vérifié un dans les 60 dernières minutes.--yesne le saute jamais, et sans surveillance personne ne peut le taper, donc la commande s'arrête avec le code de sortie4. Lancez d'abordopenemail verify. On ne demande jamais de code à une clé API. --dry-runaffiche la requête qu'un changement enverrait, avec son corps, et sort avec le code0sans l'envoyer ni vous demander de confirmer.- Une liste lit une page.
--limitprend de 1 à 100 et le serveur en envoie 25 quand elle est omise, sauf danstemp-mail list-messages, qui prend de 1 à 50 et en envoie 50.--cursorprend lenextCursorde la page précédente.--alllit chaque page,--max <n>s'arrête après autant d'éléments, et--ndjson, ou--alldans un pipe, affiche un objet JSON par ligne. Avec--json, une liste affiche un seul document{ items, hasMore, nextCursor }. roles list-permissions,languages list,temp-mail list-domainsettemp-mail list-attachmentsrenvoient tout d'un coup, sous forme de simple tableau, sans pages.- Un refus sort avec le code de son statut :
3pour un 401, comme une clé révoquée,4pour un 403, commebeyond_caller_authorityouowner_only,5pour un 404,6pour un 409, commenot_revoked,role_in_useouinvitation_too_soon,7pour un 400 ou un 422, commemember_is_ownerourole_limit_reached, et8pour un 429, commetoo_many_inboxes. - Un changement qui ferait quelque chose deux fois n'est jamais relancé après une panne réseau :
keys createetrotate,me rotate,roles createetdelete,members add,remove,revoke-addressetresend-invitation, ainsi quetemp-mail create,extend,deleteetdelete-message. Vérifiez avant d'en relancer une. Les lectures, et les changements qui aboutissent au même résultat deux fois, commekeys update,keys revoke,roles update,members updateetgrant-address, sont relancés d'eux-mêmes.