Authentifizierung
Mit dem Browser oder einem API-Schlüssel anmelden, mehrere Profile führen und vor einer heiklen Änderung einen Code bestätigen.
Zwei Arten der Anmeldung
Führen Sie openemail login in einem Terminal aus, und es fragt, welche Art Sie möchten. In beiden Fällen wird die Anmeldung als Profil gespeichert, und jeder spätere Befehl nutzt das aktive.
| Befehl | Handelt als | Bestätigungscodes |
|---|---|---|
| openemail login | Sie, im Workspace und mit dem Zugriff, den Sie freigeben | Wird vor einigen heiklen Änderungen gefragt |
| openemail login --with-token | Der Workspace, mit den Scopes des Schlüssels | Nie gefragt |
- Nur eine Browser-Anmeldung kann
ai compose,ai summarizeund die MCP-Befehle nutzen. - Eine Browser-Anmeldung gilt, bis die gewählte Freigabe abläuft oder Sie sich abmelden. Ein Schlüssel funktioniert, bis er widerrufen wird.
Browser-Anmeldung
openemail loginregistriert für diese Anmeldung eine neue App namensOpenEmail CLI on <your computer>und öffnet die Freigabeseite von OpenEmail in Ihrem Browser. Öffnet sich der Browser nicht, nutzen Sie den ausgegebenen Link.- Melden Sie sich bei Bedarf an und wählen Sie dann den Workspace, den Zugriff der CLI (lesen, lesen und senden, voll oder eigene Berechtigungen), die Domains oder Adressen, die sie erreicht, und wie lange die Freigabe gilt.
- Geben Sie frei. Der Browser reicht die Freigabe von selbst an das Terminal zurück, und Sie können den Tab schließen. Die CLI zeigt, als wer Sie angemeldet sind, den Workspace und wann die Freigabe abläuft.
openemail loginopenemail login --scopes emails:send,threads:readopenemail login --profile work- Die CLI wartet 10 Minuten auf Ihre Freigabe. Wählen Sie auf der Freigabeseite Nicht jetzt, wird die Anmeldung mit Exit-Code
10abgebrochen. --scopeswählt Berechtigungen auf der Freigabeseite vor, und Sie können sie dort noch ändern.- Hat das Profil schon eine Anmeldung, fragt ein Terminal, bevor es sie ersetzt. Unbeaufsichtigt lehnt es ab, außer Sie übergeben
--forceoder--yes. Das Ersetzen einer Browser-Anmeldung widerruft die alte.
Jede Browser-Anmeldung ist eine eigene verbundene App, aufgeführt unter Konto → Verbundene Apps mit dem freigegebenen Zugriff, wo Sie ihn ändern oder die App entfernen können. openemail open apps öffnet diese Seite.
Darunter liegt der OAuth-Ablauf, den der MCP-Server nutzt: ein öffentlicher Client mit PKCE, ein einmaliger Code und ein Zugriffstoken, das eine Stunde gilt und für Sie erneuert wird. Der Browser kehrt zu 127.0.0.1 auf einem zufälligen Port zurück, und dort wird nur der Code dieser Anmeldung angenommen.
Über SSH oder ohne Browser
Kann die CLI auf diesem Rechner keinen Browser öffnen, gibt sie stattdessen den Link aus: über SSH, in CI, unter Linux ohne Display oder wenn Sie --no-browser übergeben. Öffnen Sie den Link in einem Browser auf einem beliebigen Gerät und geben Sie frei. Die Seite zeigt dann einen Anmeldecode, den Sie ins Terminal einfügen.
$ 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- Ein Code gilt nur für die Anmeldung, die den Link ausgegeben hat, ein Code aus einem anderen Tab wird also abgelehnt.
- Die ganze Adresse einzufügen, bei der der Browser gelandet ist, funktioniert auch.
- Ohne Terminal leiten Sie den Code über stdin ein.
API-Schlüssel
Ein API-Schlüssel meldet ein Skript ohne Browser an und wird nie nach einem Code gefragt. Erstellen Sie einen unter Einstellungen → API-Schlüssel (openemail open api-keys) mit nur den Scopes, die das Skript braucht. Die CLI prüft den Schlüssel mit GET /keys/self, bevor sie ihn speichert, und nimmt Schlüssel mit oe_live_ und oe_test_. Mit einem Testschlüssel gesendete Mail wird nie zugestellt.
openemail login --with-token < ~/.config/openemail/keyecho "$OPENEMAIL_KEY" | openemail login --with-token --profile ciopenemail login --token oe_live_…--token funktioniert auch, aber der Schlüssel landet in Ihrer Shell-Historie, daher warnt die CLI und schlägt --with-token vor. Zwei Wege nutzen einen Schlüssel, ohne ihn zu speichern:
OPENEMAIL_API_KEYin der Umgebung wird von jedem Befehl genutzt, der sie sieht, vor jedem gespeicherten Profil.--api-key <key>wird für diesen einen Befehl genutzt.
Gibt es mehr als eine Anmeldeinformation, gewinnt die erste von diesen: --api-key, OPENEMAIL_API_KEY, das mit --profile benannte Profil, das mit OPENEMAIL_PROFILE benannte Profil, dann das aktive Profil.
Profile
Ein Profil ist eine gespeicherte Anmeldung, von beiderlei Art. Das erste heißt default. Melden Sie weitere mit --profile an und wechseln Sie zwischen ihnen:
openemail login --profile workopenemail profile listopenemail profile use workopenemail inbox --profile defaultOPENEMAIL_PROFILE=work openemail statusopenemail profile currentopenemail profile remove workprofile listzeigt jedes Profil mit Art, Workspace und Benutzer oder Schlüssel und markiert das aktive. Sein JSON enthält nie ein Token oder einen Schlüssel.profile currentgibt nur den Namen auf stdout aus, sodass$(openemail profile current)in einem Skript funktioniert.profile remove <name>ist dasselbe wieopenemail logout --profile <name>.- Ein Profilname hat bis zu 64 Buchstaben, Ziffern, Punkte, Bindestriche und Unterstriche.
profile useheißt auchprofile switch. Wenn Sie das aktive Profil entfernen oder sich davon abmelden, ist kein Profil mehr aktiv, und der nächste Befehl, der eine Anmeldung braucht, verweist aufopenemail profile use <name>.
Mit welcher API eine Anmeldung spricht
Ein gespeichertes Profil merkt sich die API, bei der es sich angemeldet hat, und seine Anmeldedaten werden nur dorthin gesendet. Ein --base-url oder OPENEMAIL_BASE_URL, das einen anderen Ursprung nennt, bricht den Befehl mit Exit-Code 2 ab, bevor etwas gesendet wird, und sagt, wie Sie sich bei diesem Ursprung mit einem eigenen Profil anmelden.
openemail login --profile other --base-url https://api.example.comopenemail inbox --profile other- Ein Schlüssel aus
OPENEMAIL_API_KEYoder--api-keyist kein gespeichertes Profil. Er geht daher an den Ursprung in--base-urloderOPENEMAIL_BASE_URL, oder anhttps://api.openemail.uk, wenn keins von beiden gesetzt ist. - Befehle, die keine Anmeldedaten senden, folgen
--base-urlundOPENEMAIL_BASE_URL, egal welches Profil aktiv ist: Wegwerf-Postfächer, Methoden, die keinen Schlüssel brauchen,docsundopen. - Einfaches
httpwird für jeden Ursprung außerlocalhost,127.0.0.1und::1mit Exit-Code2abgelehnt: für die API, die Web-App, die Anmelde-, Token- und Widerrufsanfragen und den MCP-Server. Verwenden Sie für alles anderehttps. - Ein Anfragepfad, der den API-Ursprung verlassen würde, etwa
openemail api //example.com/x, bricht mit Exit-Code2undinvalid_pathab, bevor etwas gesendet wird.
Was die Anmeldungen nicht können
Eine Browser-Anmeldung handelt als Sie, aber manches wird für eine App nie freigegeben, egal welchen Zugriff Sie wählen:
- API-Schlüssel verwalten.
keys:writeundkeys:managewerden nie gewährt, daher braucht das Anlegen, Rotieren und Widerrufen von Schlüsseln einen API-Schlüssel mitkeys:manageoder die Web-App.openemail me rotaterotiert den Schlüssel, mit dem Sie aufrufen, braucht also einen API-Schlüssel. - Abrechnung und die Workspaces selbst. Tarife, Rechnungen sowie das Anlegen, Wechseln oder Löschen eines Workspace bleiben in der Web-App.
- Ihre kostenlose Adresse. Eine App wird für einen Business-Workspace freigegeben, und der persönliche Workspace mit der kostenlosen Adresse wird nie angeboten, nach derselben Regel wie in der API.
- Mitglieder und Rollen, außer die Freigabe umfasst den ganzen Workspace.
members:writeundroles:writefallen bei einer Freigabe weg, die auf einige Domains oder Adressen beschränkt ist.
Ein API-Schlüssel hat eine eigene Grenze. ai compose, ai summarize und jeder openemail mcp-Befehl außer config laufen über den MCP-Server, der eine Browser-Anmeldung braucht, mit einem Schlüssel brechen sie also mit Exit-Code 4 ab und sagen, warum.
Bestätigungscodes
Mit einer Browser-Anmeldung fragen einige Änderungen zuerst nach einem Bestätigungscode, wie in der Web-App. Die CLI fragt, wenn sie einen braucht: Sie schickt Ihnen einen sechsstelligen Code per E-Mail oder fragt, wenn die Zwei-Faktor-Anmeldung aktiv ist, nach einem Code aus Ihrer Authenticator-App oder einem Ihrer Backup-Codes. Ist der Code richtig, läuft der Befehl, und diese Anmeldung wird 60 Minuten lang nicht mehr gefragt. Ein API-Schlüssel wird nie gefragt.
| Befehl | Fragt nach einem Code |
|---|---|
| webhooks create, update | Immer |
| rules create, update | Immer |
| roles update, delete | Immer |
| members add, update, remove | Immer |
| members grant-address, revoke-address | Immer |
| domains delete, delete-address | Immer |
| audiences delete | Für eine Zielgruppe, die Sie angelegt haben |
| audiences empty | Für eine selbst angelegte Zielgruppe, die noch Kontakte enthält |
| mcp call createRule, setRuleEnabled | Immer |
| mcp call removeDomain, removeDomainAddress | Immer |
| mcp call deleteAudience, emptyAudience | Wie der passende Zielgruppen-Befehl |
| api | Wenn die aufgerufene Operation eine der obigen ist |
$ 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.- Tippen Sie
ran der Eingabeaufforderung, um die E-Mail erneut senden zu lassen. Ein falscher Code sagt, wie viele Versuche bleiben. - Nachdem der Code angenommen ist, läuft der Befehl noch einmal, nie zweimal.
--yesbestätigt ein Löschen, überspringt aber nie einen Code.- Unbeaufsichtigt (mit
--jsonoder--no-input, in CI oder ohne Terminal) kann niemand den Code eingeben, daher bricht der Befehl mit Exit-Code4ab und ändert nichts. - Ein Code erlaubt 5 Versuche, und nach dem fünften falschen bietet die CLI einen neuen Code an. Jede Anmeldung kann 5 Codes pro Stunde und 20 pro Tag anfordern.
- Zehn falsche Codes für eine Anmeldung innerhalb von 24 Stunden pausieren ihre Bestätigung. Die CLI sagt dann, wann es weitergeht, und bricht mit Exit-Code
4undstep_up_pausedab, ohne einen weiteren Code anzubieten, und die E-Mail, die das erklärt, nennt die App.
Führen Sie openemail verify aus, bevor ein Skript oder ein KI-Client etwas Heikles tut. Es fragt jetzt nach dem Code, und in den nächsten 60 Minuten läuft jeder Befehl dieses Profils ohne einen, einschließlich openemail mcp call und der lokalen MCP-Brücke.
openemail verifyopenemail verify --statusopenemail verify --status --jsonopenemail verify --forceDie 60 Minuten gehören zu einer Anmeldung. Ein anderes Profil oder ein KI-Client, der sich selbst angemeldet hat, wird nach einem eigenen Code gefragt, und Abmelden beendet sie sofort. --force fordert einen neuen Code an und startet frische 60 Minuten.
Ablauf, Abmeldung und Widerruf
- Das Zugriffstoken hinter einer Browser-Anmeldung gilt eine Stunde. Die CLI erneuert es, bevor es abläuft, und speichert das neue, sodass Sie davon nichts merken.
- Jedes Refresh-Token funktioniert genau einmal. Wird ein altes mehr als 30 Sekunden, nachdem die CLI es ersetzt hat, benutzt, etwa aus einer Kopie von
config.jsonauf einem anderen Rechner, widerruft der Server diese Anmeldung vollständig. Melden Sie sich also auf jedem Rechner an, statt die Datei zu kopieren. - Die Freigabe gilt so lange, wie Sie es auf der Freigabeseite gewählt haben. Endet sie oder wird die App unter Konto → Verbundene Apps entfernt, kann die CLI nicht mehr für Sie handeln und bittet Sie, erneut
openemail loginauszuführen. openemail logoutwiderruft eine Browser-Anmeldung auf dem Server, was sie aus den verbundenen Apps entfernt, und vergisst sie dann auf diesem Gerät, auch wenn der Server nicht erreichbar ist.--allmeldet jedes Profil ab.- Die Abmeldung eines API-Schlüssels vergisst ihn nur hier. Der Schlüssel funktioniert weiter, bis Sie ihn widerrufen, mit
openemail keys revoke <id>oder in der Web-App.
Wo Anmeldungen aufbewahrt werden
Alles liegt in ~/.openemail oder in dem Ordner, den OPENEMAIL_CONFIG_DIR nennt. Der Ordner ist nur für Sie lesbar (0700), ebenso jede Datei darin (0600). Jede Datei wird in eine temporäre Datei geschrieben und an ihren Platz umbenannt, sodass ein Absturz nie eine halbe hinterlässt, und jede Änderung geschieht unter einer Sperrdatei, sodass parallel laufende Befehle nie ein Profil verlieren.
| Datei | Was sie enthält |
|---|---|
| config.json | Ihre Profile: API-Schlüssel, Zugriffs- und Refresh-Token und welches Profil aktiv ist |
| temp-mail.json | Die Wegwerf-Postfächer, die diese CLI angelegt hat, mit ihren Postfach-Tokens |
| update-check.json | Wann npm zuletzt nach einem neuen Release gefragt wurde, und was es antwortete |
Tokens und Schlüssel liegen als Klartext in Dateien, die nur Ihr Benutzer lesen kann, behandeln Sie den Ordner also wie einen SSH-Schlüssel. Eine Datei, mit der die CLI nichts anfangen kann, gilt nie stillschweigend als abgemeldet: Sie warnt einmal mit dem Pfad und legt eine Kopie daneben (config.json.bak), bevor sie eine neue schreibt. Eine Datei, die sie gar nicht lesen kann, etwa wegen ihrer Berechtigungen, bricht den Befehl mit einem Fehler ab, der sie nennt.