Schlüssel, Mitglieder und Rollen
API-Schlüssel verwalten und nachlesen, was sie getan haben, Mitglieder einladen und verwalten, Rollen schreiben, die genutzten Anmeldedaten prüfen und Wegwerf-Postfächer anlegen.
Überblick
Diese Befehle entscheiden, wer und was den Workspace erreichen kann. openemail keys verwaltet API-Schlüssel und liest, was jeder getan hat, openemail members verwaltet die Personen im Workspace und ihre Einladungen, und openemail roles legt fest, was ein Mitglied oder ein Schlüssel tun darf. openemail me beschreibt den Schlüssel oder die Anmeldung, mit der Sie aufrufen, und openemail languages listet die Sprachen, die ein übersetzter Versand annimmt. Wegwerf-Postfächer brauchen überhaupt keine Anmeldung: openemail temp ist der alltägliche Weg, eines zu nutzen, und openemail temp-mail ist jeder Aufruf der API dahinter. openemail api erreicht jeden Endpunkt, den die anderen Befehle nicht erreichen.
- Ein Schlüsselbefehl nimmt die Schlüssel-ID, die 24 Hexzeichen nach
oe_live_, so wiekeys listsie zeigt. Ein Mitgliedsbefehl nimmt die Konto-ID,userIdinmembers list, nie eine E-Mail-Adresse. Ein Rollenbefehl nimmt einerole_-ID ausroles list, weil sich Rollen nicht nach Namen nachschlagen lassen. - Die Namespaces hören auch auf
key,member,role,languageundtempMail. Die üblichen Verb-Aliasse funktionieren, etwals,show,new,editundrm. Inmembers, dessen Verbenaddundremoveheißen, führennewundcreatezuadd, undrm,delunddeletezuremove. openemail <command> --helplistet jedes Argument und Flag mit seinem Typ, dem Scope, den der Aufruf braucht, Methode und Pfad und dem, was zurückkommt. Fügen Sie--jsonhinzu, um dieselbe Seite als Daten zu erhalten.
Alle Befehle
| Befehl | Was es tut |
|---|---|
| openemail me get | Den API-Schlüssel oder die Browser-Anmeldung beschreiben, mit der Sie aufrufen: ihre Scopes, die Rolle, die sie deckelt, ihren Workspace und als wen sie senden darf. Braucht keinen Scope |
| openemail me ping | Prüfen, dass sich die Anmeldedaten authentifizieren, für einen Health-Check. Braucht keinen Scope |
| openemail me rotate | Dem API-Schlüssel, mit dem Sie aufrufen, ein neues Geheimnis geben, einmal angezeigt. Fragt nach einer Bestätigung |
| openemail keys list | Die API-Schlüssel des Workspace auflisten, neueste zuerst, mit Status, Scopes, Rolle, Sendebereich und letzter Nutzung. Nie ein Geheimnis |
| openemail keys get <id> | Einen Schlüssel lesen, ohne sein Geheimnis |
| openemail keys create --name <value> | Einen Schlüssel erzeugen und sein Geheimnis einmal in token erhalten |
| openemail keys update <id> | Einen Schlüssel umbenennen, seine Scopes oder seinen Sendebereich ersetzen oder ihn mit --no-enabled und --enabled aus- und einschalten |
| openemail keys delete <id> | Einen widerrufenen Schlüssel aus der Liste entfernen und seine Historie behalten. Fragt nach einer Bestätigung |
| openemail keys rotate <id> | Einem Schlüssel ein neues Geheimnis geben, einmal angezeigt, und das alte sofort stoppen. Fragt nach einer Bestätigung |
| openemail keys revoke <id> | Einen Schlüssel endgültig widerrufen, mit optionalem --reason. Fragt nach einer Bestätigung |
| openemail keys list-requests <id> | Das Anfrageprotokoll eines Schlüssels lesen: Methode, Pfad, Status, Fehlercode, Dauer, IP und User-Agent |
| openemail keys list-activity <id> | Lesen, was mit einem Schlüssel passiert ist: angelegt, geändert, rotiert, aus- und eingeschaltet, widerrufen, gelöscht und jeder abgelehnte Aufruf |
| openemail keys list-workspace-requests | Das Anfrageprotokoll jedes Schlüssels lesen, den Sie sehen können, oder der Schlüssel, die --key-ids nennt |
| openemail keys list-workspace-activity | Lesen, was mit jedem Schlüssel passiert ist, den Sie sehen können, oder mit denen, die --key-ids nennt |
| openemail roles list | Die Rollen des Workspace auflisten, vorbelegte zuerst, mit der Zahl der Mitglieder und Schlüssel, die jede innehaben |
| openemail roles get <id> | Eine Rolle mit ihren Berechtigungen und aktuellen Nutzungszahlen lesen |
| openemail roles create --name <value> --permissions <a,b> | Eine eigene Rolle anlegen, mit optionaler --description |
| openemail roles update <id> | Eine Rolle umbenennen, ihre Beschreibung ändern oder ihre ganze Berechtigungsliste ersetzen |
| openemail roles delete <id> | Eine Rolle löschen und alle, die sie innehaben, in die Rolle aus --reassign-to verschieben. Fragt nach einer Bestätigung |
| openemail roles list-permissions | Das Berechtigungsvokabular auflisten, mit Bezeichnung, Gruppe und ob ein Schlüssel die jeweilige Berechtigung haben kann |
| openemail members list | Alle mit Zugriff auflisten, den Eigentümer zuerst, mit ihrer Rolle, ihren Berechtigungen und den Adressen und Domains, die jede Person nutzen darf |
| openemail members get <user-id> | Ein Mitglied über die Konto-ID lesen |
| openemail members add --email <value> --role-id <value> | Jemanden mit einer Rolle einladen, und mit Adressen oder ganzen Domains über --address-ids, --domain-ids und --access |
| openemail members update <user-id> --role-id <value> | Ein Mitglied in eine andere Rolle verschieben. Seine Adress- und Domain-Freigaben bleiben, wie sie sind |
| openemail members remove <user-id> | Jemanden mit jeder Adressfreigabe, die er hat, aus dem Workspace nehmen. Fragt nach einer Bestätigung |
| openemail members grant-address <user-id> --address-id <value> | Einem Mitglied eine Adresse geben oder seinen --access darauf ändern |
| openemail members revoke-address <user-id> <address-id> | Einem Mitglied eine Adresse wieder entziehen. Fragt nach einer Bestätigung |
| openemail members list-invitations | Die Einladungen auflisten, die noch niemand angenommen hat, abgelaufene eingeschlossen |
| openemail members revoke-invitation <invitation-id> | Eine Einladung zurückziehen, sodass ihr Link nicht mehr funktioniert. Fragt nach einer Bestätigung |
| openemail members resend-invitation <invitation-id> | Eine Einladung erneut senden, mit einem neuen Link und 14 weiteren Tagen |
| openemail languages list | Jede Sprache auflisten, die ein übersetzter Versand annimmt, in der Reihenfolge, in der eine Auswahl sie zeigen sollte. Braucht keinen Scope |
| openemail temp new [--name <local-part>] [--domain <domain>] [--ttl <minutes>] | Ein Wegwerf-Postfach anlegen und nur seine Adresse ausgeben. Braucht keine Anmeldung |
| openemail temp list | Die Wegwerf-Postfächer auflisten, die diese CLI angelegt hat, ohne das Netzwerk zu lesen |
| openemail temp read [inbox] [message-id] | Die Mail in einem Postfach auflisten oder eine Nachricht als lesbaren Text ausgeben |
| openemail temp watch [inbox] [--first] | Jede neue Nachricht ausgeben, sobald sie eintrifft, mit einer Prüfung alle 3 Sekunden |
| openemail temp delete [inbox] [--yes] | Ein Postfach und seine Mail jetzt löschen und sein Token vergessen. Fragt nach einer Bestätigung |
| openemail temp-mail list-domains | Die Domains auflisten, auf denen sich ein Wegwerf-Postfach anlegen lässt. Braucht keine Anmeldedaten |
| openemail temp-mail create | Ein Wegwerf-Postfach und sein Postfach-Token anlegen, das die CLI speichert. Braucht keine Anmeldedaten |
| openemail temp-mail get <inbox-id> | Ablauf, verbleibende Verlängerungen und Nachrichtenzahl eines Postfachs lesen |
| openemail temp-mail extend <inbox-id> | Den Ablauf um bis zu eine Stunde hinausschieben, innerhalb von 24 Stunden nach dem Anlegen des Postfachs |
| openemail temp-mail delete <inbox-id> | Ein Postfach und seine Mail jetzt vernichten. Fragt nach einer Bestätigung |
| openemail temp-mail list-messages <inbox-id> | Eine Seite der Nachrichten auflisten, neueste zuerst, jede mit einem kurzen Klartext-Ausschnitt |
| openemail temp-mail get-message <inbox-id> <message-id> | Eine Nachricht mit ihrem gespeicherten Body lesen und als gesehen markieren |
| openemail temp-mail delete-message <inbox-id> <message-id> | Eine Nachricht mit Body und Anhängen löschen. Fragt nach einer Bestätigung |
| openemail temp-mail list-attachments <inbox-id> <message-id> | Die Anhänge einer Nachricht lesen, mit ihren Bytes als base64 |
| openemail api <method> <path> | Jeden REST-Endpunkt mit Ihrer Anmeldung, ihren Bestätigungscodes und ihren Bestätigungen aufrufen |
Jedes Flag steht in der Hilfe seines Befehls, zum Beispiel openemail keys create --help, openemail members add --help oder openemail temp new --help.
API-Schlüssel
Schlüssel zu lesen braucht keys:read, und jede Änderung braucht keys:manage. Eine Browser-Anmeldung bekommt nie keys:write oder keys:manage, daher braucht das Anlegen, Ändern, Rotieren, Widerrufen und Löschen von Schlüsseln einen API-Schlüssel mit keys:manage oder die Web-App (openemail open api-keys). Eine Browser-Anmeldung mit keys:read liest Schlüssel nur für den Eigentümer des Workspace, und die Anmeldung eines Mitglieds wird mit 403 owner_only abgelehnt.
keys create,keys rotateundme rotategeben das Geheimnis des Schlüssels einmal intokenaus, und die CLI warnt dann, dass es nie wieder angezeigt wird. Jeder Lesezugriff zeigt stattdessenmaskedKey.- Ohne Angaben hat ein neuer Schlüssel nur
emails:sendund übernimmt Rolle, Sendebereich und Ablauf des Schlüssels, der ihn anlegt.--domain-allowlistund--address-allowlistlegen fest, als wen er senden darf, und--expires-in-minutesnimmt 5 bis 5.256.000, also zehn Jahre. - Ein Schlüssel erzeugt oder erreicht nie einen Schlüssel, der weiter reicht als er selbst. Scopes, Rolle, Ablauf, Modus und Sendebereich müssen alle innerhalb des aufrufenden Schlüssels liegen, sonst wird der Aufruf mit 403
beyond_caller_authorityabgelehnt, undparamnennt, was zu weit war. Ein Schlüssel, der auf einige Domains oder Adressen beschränkt ist, sieht nur die Schlüssel innerhalb seines eigenen Sendebereichs, und jeder andere ist ein 404. keys updateersetzt, was Sie senden:--scopes,--address-allowlistund--domain-allowlistnehmen jeweils die ganze neue Liste, und ein weggelassenes Flag bleibt, wie es war.--no-enabledschaltet einen Schlüssel aus, sodass jeder Aufruf damit mitinactive_api_keyabgelehnt wird, und--enabledstellt ihn genau wieder her. So stoppen Sie einen Schlüssel auf eine Weise, die sich rückgängig machen lässt.keys revokeist endgültig: Der Schlüssel lässt sich nie wieder einschalten, rotieren oder ändern.keys deleteentfernt nur einen widerrufenen Schlüssel, und jeder andere wird mit 409not_revokedabgelehnt. Anfrageprotokoll und Aktivität eines gelöschten Schlüssels bleiben, unter Deleted key.keys rotatehat kein Überlappungsfenster, das alte Geheimnis funktioniert also in dem Moment nicht mehr, in dem das neue zurückkommt. Ist der Schlüssel der, den Ihr gespeichertes Profil nutzt, speichert die CLI das neue Geheimnis in diesem Profil, sodass es weiter funktioniert. Ein Schlüssel ausOPENEMAIL_API_KEYoder--api-keylässt sich nicht speichern, daher sagt Ihnen die CLI, dass Sie das neue Token dort ablegen sollen, wo der alte Schlüssel lag.
Das Anfrageprotokoll hält jeden Aufruf fest, den ein Schlüssel gemacht hat: Methode, Pfad, Status, Fehlercode, Dauer, IP und User-Agent, nie einen Body oder einen Query-String. Nichts wird bereinigt, es reicht also bis zum ersten Aufruf eines Schlüssels zurück, und Aufrufe mit einer Browser-Anmeldung stehen nicht darin. Das Aktivitätsprotokoll hält jede Änderung an einem Schlüssel fest und jeden Aufruf, der den Schlüssel vorgelegt hat und abgelehnt wurde, als auth_failed, mit dem Urheber jeder Änderung in actor.
list-requestsundlist-activitylesen einen Schlüssel.list-workspace-requestsundlist-workspace-activitylesen jeden Schlüssel, den Sie sehen können, oder bis zu 50, die--key-idsnennt, gelöschte Schlüssel eingeschlossen.--sinceund--untilbehalten einen Zeitraum und nehmen eine ISO-8601-Zeit wie2026-09-01T00:00:00Z.--failed-onlybehält die Aufrufe, die mit einem Status von 400 oder mehr beantwortet wurden.
Ihre Anmeldedaten und Sprachen
openemail me get ist der erste Befehl, den Sie ausführen, wenn ein Aufruf abgelehnt wird. Er braucht keinen Scope, daher kann sich jeder gültige Schlüssel und jede gültige Anmeldung selbst beschreiben.
scopesist das, was die Anmeldedaten gerade tun dürfen: die Scopes, mit denen sie angelegt wurden, beschnitten durch die Rolle, unter der sie ausgestellt wurden, bei jeder Anfrage neu berechnet.grantedScopesist das, womit sie angelegt wurden, undroleIdnennt die Rolle. Ein Scope, der ingrantedScopessteht und inscopesfehlt, wurde von der Rolle entfernt. Das ist der übliche Grund für ein 403insufficient_scopebei einem Schlüssel, der den Scope zu haben scheint, und die Lösung ist, die Rolle zu ändern, statt einen weiteren Schlüssel zu erzeugen.domainAllowlistundaddressAllowlistsagen, als wen sie senden dürfen. Sind beide null, ist es jede Adresse, die dem Workspace gehört.- Mit einer Browser-Anmeldung beschreibt er die Anmeldung:
objectistoauth_token,clientIdnennt die verbundene App dieser CLI, undexpiresAtist der Zeitpunkt, an dem Ihre Freigabe endet, oder null, wenn sie nie endet. me pingantwortet mitok: trueund denselben Scope-Angaben, aber ohne die Allowlists, was zu einem Health-Check passt. Ein widerrufener, abgelaufener, ausgeschalteter oder falsch getippter Schlüssel scheitert mit einem 401 und Exit-Code3.me rotategibt dem Schlüssel, mit dem Sie aufrufen, ein neues Geheimnis. Es brauchtkeys:write, das eine Browser-Anmeldung nie hat, also braucht es einen API-Schlüssel. Alles andere am Schlüssel bleibt, das alte Geheimnis funktioniert sofort nicht mehr, und ein gespeichertes Profil bekommt das neue, wie beikeys rotate. Eine verlorene Antwort kann den Schlüssel mit einem Geheimnis zurücklassen, das niemand gesehen hat, und er braucht dann ein neues aus der Web-App.openemail whoamizeigt dieselbe Antwort, für Menschen formatiert.
openemail languages list gibt die ganze Sprachtabelle in einer Antwort aus, rund zweihundert Zeilen, mit Code, englischem Namen, Eigennamen, Flagge jeder Sprache und ob sie von rechts nach links geschrieben wird. Code, englischer Name und Eigenname funktionieren alle als Ziel eines übersetzten Versands. Es braucht eine Anmeldung, aber keinen Scope. openemail ai languages gibt dieselbe Tabelle mit einem --search-Flag aus und abgemeldet die Tabelle, die mit der CLI gebündelt ist.
Mitglieder und Rollen
Ein Mitglied hat zwei Dinge, die nie zusammengeführt werden. Seine Rolle sagt, was es tun darf, und seine Adress- und Domain-Freigaben sagen, mit welcher Mail es das tun darf, jede Freigabe mit eigenem Zugriff: member liest und sendet, und viewer liest nur. Ein Versand braucht beides, eine Rolle mit emails:send und eine viewer-Freigabe für eine Adresse können also trotzdem nicht von ihr senden. Eine ganze Domain deckt jede Adresse darauf ab, auch später angelegte.
members listsetzt den Eigentümer des Workspace an erste Stelle, markiert mitisOwner, lassen Sie diese Zeile beim Zählen der Plätze also weg. Der Eigentümer hat jede Berechtigung und kann nicht eingeladen, geändert oder entfernt werden, und ebenso wenig kann jemand, der schon im Workspace ist, erneut eingeladen werden: Beides ist 422member_is_owner.- Personen, die Adressfreigaben haben, denen aber nie eine Rolle gegeben wurde, kommen mit
implied: truezurück, und ihre Rolle wird aus ihren Freigaben abgeleitet.members updategibt ihnen eine echte. members addsendet eine Einladung, auch an jemanden, der schon ein Konto hat. Nichts wird gewährt, bis die Person annimmt, und dann genau die Rolle, die Adressen und die Domains, die die Einladung trägt. Dieselbe Adresse innerhalb von zehn Minuten erneut einzuladen ist 409invitation_too_soon, und danach frischt es die wartende Einladung auf, statt eine zweite zu senden.resend-invitationsendet einen neuen Link, der 14 weitere Tage gilt, und zieht den alten zurück, was auch eine abgelaufene Einladung erneuert.revoke-invitationzieht eine zurück, und eine bereits angenommene Einladung ist 409invitation_accepted, entfernen Sie also stattdessen das Mitglied.members updateändert die Rolle und sonst nichts.grant-addressgibt eine Adresse oder ändert den Zugriff darauf, ein erneuter Aufruf mit einem anderen--accessändert also die Freigabe, statt eine zweite hinzuzufügen.revoke-addressnimmt eine Adresse zurück und lässt den Rest. Wird die letzte Freigabe eines abgeleiteten Mitglieds widerrufen, wird es aus dem Workspace entfernt.members removebeendet den Zugriff einer Person auf den Workspace, ihre Mitgliedschaft und jede Freigabe, und meldet inaddressesRevoked, wie viele Adressfreigaben entfielen. Ihr Konto und die Mail, die sie gesendet hat, bleiben unberührt.
Eine Rolle ist auch eine Obergrenze für die API-Schlüssel, die unter ihr ausgestellt werden. Was ein Schlüssel tun darf, sind seine eigenen Scopes, beschnitten durch die Berechtigungen seiner Rolle, bei jeder Anfrage neu berechnet.
roles listzeigt zuerst die vorbelegten Rollen in der Reihenfolge Owner, Admin, Member, Viewer, Developer und Billing, dann eigene Rollen nach Namen. Ein Workspace fasst bis zu 24 eigene Rollen, und darüber hinaus istroles create422role_limit_reached.- Eine Rolle speichert die Berechtigungen, die ihre Berechtigungen einschließen,
templates:writespeichert also auchtemplates:read, undroles:writebringtroles:readundmembers:readmit. Lesen Sie die Liste aus der Antwort zurück, statt sie anzunehmen. roles update --permissionsersetzt die ganze Liste, lesen Sie also die Rolle, ändern Sie die Liste und senden Sie sie vollständig.--description nulllöscht die Notiz. Eine Änderung gilt beim nächsten Aufruf jedes Mitglieds und Schlüssels, das die Rolle innehat.- Jede Rolle außer Owner lässt sich umbenennen, neu schreiben und löschen, vorbelegte eingeschlossen, und eine gelöschte vorbelegte Rolle kommt nicht zurück. Die Owner-Rolle beantwortet eine Bearbeitung mit 409
role_immutableund ein Löschen mit 409role_undeletable. - Solange ein Mitglied, ein API-Schlüssel oder eine wartende Einladung eine Rolle innehat, braucht
roles delete--reassign-tomit der Rolle, die sie übernimmt, sonst wird es mit 409role_in_useabgelehnt. Widerrufene Schlüssel verweisen weiter auf ihre Rolle, daher kann eine Rolle, derenapiKeys-Zahl 0 ist, es trotzdem brauchen. Die Antwort meldetreassignedPersonen undkeysReassignedSchlüssel. roles list-permissionslistet das ganze Vokabular mit Bezeichnung und Gruppe für jeden Eintrag. Einige, etwabilling:writeundworkspace:manage, kommen mitscope: falsezurück: Eine Rolle kann sie haben, aber kein Schlüssel.
Ein Schlüssel mit roles:write kann die Rolle bearbeiten, die ihn deckelt, und sich bei seinem nächsten Aufruf selbst erweitern, halten Sie diesen Scope also von Schlüsseln fern, die nur lesen müssen. Mit einer Browser-Anmeldung werden members:write und roles:write nur gewährt, wenn die Freigabe den ganzen Workspace umfasst statt einiger Domains oder Adressen.
Wegwerf-Postfächer
Ein Wegwerf-Postfach braucht kein Konto und keine Anmeldung. Es wird mit seinem eigenen Postfach-Token erreicht, das mit oe_inbox_ beginnt und einmal zurückkommt, wenn das Postfach angelegt wird. Nutzen Sie im Alltag openemail temp und openemail temp-mail, wenn Sie ein Feld oder einen Schritt brauchen, den temp nicht zeigt, etwa die verbleibenden Verlängerungen, eine Verlängerung oder die Bytes eines Anhangs.
- Beide halten das Token in
~/.openemail/temp-mail.json, nur für Sie lesbar.temp newundtemp-mail createspeichern es,temp listzeigt Postfächer, die auf beiden Wegen angelegt wurden, und beide Löschbefehle vergessen es. Ein gespeichertes Postfach lässt sich überall, wo ein Befehl nach seiner ID fragt, mit seiner Adresse benennen. - Für ein Postfach, das diese CLI nicht angelegt hat, übergeben Sie das Token mit
--inbox-token. Ohne gespeichertes oder übergebenes Token bricht der Befehl mit Exit-Code3ab, bevor etwas gesendet wird. - Die beiden Befehle zum Anlegen benennen ihre Flags unterschiedlich:
temp newnimmt--name,--domainund--ttl, undtemp-mail createnimmt--local-part,--domainund--ttl-minutes. Ein Local-Part hat 3 bis 32 Buchstaben, Ziffern, Punkte, Bindestriche oder Unterstriche, beginnt und endet mit einem Buchstaben oder einer Ziffer, und Namen wiepostmasterwerden abgelehnt. Die Laufzeit beträgt 1 bis 1440 Minuten, standardmäßig 60. - Jede IP-Adresse kann 6 Postfächer pro Stunde und 30 pro Tag anlegen, und das nächste ist 429
too_many_inboxes, Exit-Code8. Das Verlängern eines Postfachs, das Sie schon haben, zählt nicht, daher isttemp-mail extenddie Antwort auf dieses Limit. temp-mail extendfügt bis zu eine Stunde hinzu, nie über 24 Stunden nach dem Anlegen des Postfachs hinaus, und höchstens 23 Mal. Lesen SieextensionsLeftaus der Antwort. Bei 0 ist es endgültig 409extension_limit.temp-mail list-messagesliest 1 bis 50 Nachrichten pro Seite, standardmäßig 50, jede mit einem Klartext-snippetvon bis zu 400 Zeichen, das oft einen Einmalcode enthält. Nichts jenseits einer Seite geht verloren, und--allgeht jede Seite durch.- Eine Nachricht mit
temp read,temp-mail get-messageodertemp-mail list-attachmentszu lesen, markiert sie als gesehen. Ein Body über 2 MB wird gekürzt, wastruncatedangibt, und ein Anhang über 8 MB wurde nie aufbewahrt, seincontentist also null. - Das Löschen eines Postfachs löscht seine Mail sofort, aber die Adresse bleibt bis 7 Tage nach dem Ende ihrer Laufzeit reserviert, und wer sie vorher erneut anfordert, bekommt 409
address_taken.
Mail in einem Wegwerf-Postfach kommt von Fremden, an eine Adresse, die jeder nennen könnte. Ihr Absender wird nie verifiziert, und nichts darin wird gescannt, gehen Sie mit ihren Links, ihrem HTML und ihren Anhängen also vorsichtig um.
Jeder Endpunkt und der security-Namespace
openemail api <method> <path> sendet eine Anfrage über denselben Transport wie jeder andere Befehl, daher gelten Ihr Profil oder Schlüssel, die Token-Erneuerung, Bestätigungscodes und Bestätigungen. Ein Pfad allein ist ein GET, und eine JSON-Antwort wird formatiert ausgegeben. openemail api /keys/self ist der Aufruf hinter me get.
-d,--datanimmt den Body als Inline-JSON, aus einer Datei mit@pathoder von stdin mit-.-q,--queryund-H,--headernehmenkey=valueund lassen sich wiederholen, und-o,--outspeichert die Antwort unverändert in einer Datei.- Ein
DELETEund jeder Aufruf, den ein Ressourcenbefehl bestätigen ließe, etwa das Widerrufen oder Rotieren eines Schlüssels, fragt zuerst nach einer Bestätigung, und unbeaufsichtigt braucht er--yes. - Eine gescheiterte Anfrage gibt den API-Fehler aus und endet mit dem passenden Code.
Der Namespace security steht nicht in openemail --help, weil openemail verify ihn steuert. Seine Verben step-up-status, begin-step-up und verify-step-up sind die Aufrufe, die verify macht: verify --status liest den Status, und verify fordert einen Code an, fragt Sie danach und prüft ihn. Sie existieren für eine Browser-Anmeldung. Mit einem API-Schlüssel wird jeder mit 400 step_up_not_applicable abgelehnt, und openemail verify sagt, dass ein Schlüssel nie einen Code braucht.
Beispiele
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 billingFühren Sie es mit einem API-Schlüssel aus, der keys:manage hat, zum Beispiel über OPENEMAIL_API_KEY. Das Geheimnis geht aus der Antwort direkt in ein neues Profil, sodass es nie auf dem Bildschirm oder in einer Datei landet. Der Schlüssel kann nur von billing.acme.com senden und läuft in 90 Tagen ab.
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" --yesDen Schlüssel zuerst auszuschalten lässt sich mit --enabled rückgängig machen. Jeder Aufruf, der ihn noch vorlegt, wird abgelehnt und erscheint in seiner Aktivität als auth_failed, was Ihnen zeigt, was noch von ihm abhängt. Widerrufen lässt sich nicht rückgängig machen, und nur ein widerrufener Schlüssel lässt sich löschen.
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-invitationsDie Rolle kommt zusätzlich mit threads:read und emails:read zurück, weil die Berechtigungen, die sie nennt, diese einschließen. Sam bekommt die Rolle und die ganze Domain erst, sobald die Einladung angenommen ist. Mit einer Browser-Anmeldung fragt members add zuerst nach einem Bestätigungscode.
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 und apiKeys werden bei der Abfrage gezählt, sie zeigen also, was das Löschen verschieben wird. Der Probelauf gibt das DELETE mit reassignTo in seiner Query aus, ohne es zu senden. Mit einer Browser-Anmeldung fragen das Update und das Löschen jeweils nach einem Bestätigungscode, führen Sie also zuerst openemail verify aus, wenn ein Skript das tut.
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 gibt nur die Adresse aus, sie passt also in eine Shell-Variable, und temp watch --first hört bei der ersten Nachricht auf. Richten Sie statt openemail send ein Anmeldeformular auf die Adresse, um dessen Bestätigungscode auf dieselbe Weise abzufangen.
Scopes, Bestätigungen und Fehler
| Scope | Befehle |
|---|---|
| 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 |
| Keiner, mit jedem Schlüssel und jeder Anmeldung | me get, me ping, languages list |
| Keiner, und keine Anmeldung | temp, temp-mail list-domains und create. Die anderen temp-mail-Befehle nehmen das Postfach-Token |
- Eine Anmeldung oder ein Schlüssel ohne den Scope bricht mit Exit-Code
4ab, nennt den fehlenden Scope und sagt, wie Sie ihn bekommen. - Diese bitten um Bestätigung:
keys delete,rotateundrevoke,me rotate,roles delete,members remove,revoke-addressundrevoke-invitation,temp deletesowietemp-mail deleteunddelete-message. Eine Antwort mit Nein endet mit Exit-Code10und ändert nichts. Unbeaufsichtigt und ohne--yesbrechen sie mit Exit-Code2ab, bevor etwas gesendet wird. - Mit einer Browser-Anmeldung fragen
roles updateundroles deletesowiemembers add,update,remove,grant-addressundrevoke-addressaußerdem nach einem Bestätigungscode, sofern diese Anmeldung nicht in den letzten 60 Minuten einen bestätigt hat.--yesüberspringt ihn nie, und unbeaufsichtigt kann ihn niemand eingeben, daher bricht der Befehl mit Exit-Code4ab. Führen Sie zuerstopenemail verifyaus. Ein API-Schlüssel wird nie gefragt. --dry-rungibt die Anfrage aus, die eine Änderung senden würde, mit ihrem Body, und endet mit Exit-Code0, ohne sie zu senden oder um Bestätigung zu bitten.- Eine Liste liest eine Seite.
--limitnimmt 1 bis 100, und der Server sendet 25, wenn es fehlt, außer beitemp-mail list-messages, das 1 bis 50 nimmt und 50 sendet.--cursornimmt dennextCursorder vorigen Seite.--allliest jede Seite,--max <n>hört nach so vielen Einträgen auf, und--ndjsonoder--allin einer Pipe gibt ein JSON-Objekt pro Zeile aus. Mit--jsongibt eine Liste ein einziges{ items, hasMore, nextCursor }-Dokument aus. roles list-permissions,languages list,temp-mail list-domainsundtemp-mail list-attachmentsgeben alles auf einmal zurück, als einfaches Array, ohne Seiten.- Eine Ablehnung endet mit dem Code ihres Status:
3für ein 401, etwa bei einem widerrufenen Schlüssel,4für ein 403, etwabeyond_caller_authorityoderowner_only,5für ein 404,6für ein 409, etwanot_revoked,role_in_useoderinvitation_too_soon,7für ein 400 oder ein 422, etwamember_is_owneroderrole_limit_reached, und8für ein 429, etwatoo_many_inboxes. - Eine Änderung, die zweimal ausgeführt etwas doppelt täte, wird nach einem Netzwerkfehler nie wiederholt:
keys createundrotate,me rotate,roles createunddelete,members add,remove,revoke-addressundresend-invitationsowietemp-mail create,extend,deleteunddelete-message. Prüfen Sie, bevor Sie einen davon erneut ausführen. Lesezugriffe und Änderungen, die zweimal ausgeführt dasselbe Ergebnis haben, etwakeys update,keys revoke,roles update,members updateundgrant-address, werden von selbst wiederholt.