Dateien, Importe und Einstellungen
Jeder Befehl für die Dateien im Postfach, den Import eines alten Postfachs oder eines Resend-Kontos, den in Mail gefundenen Kalender und die Einstellungen des Workspace und jeder Adresse.
Überblick
Fünf Namespaces decken ab, was rund um die Mail selbst liegt. openemail files ist die Seite Dateien: jeder gesendete und empfangene Anhang und jede hochgeladene Datei, mit ihren Bytes und den Download-Links, als die sie hinausging. openemail imports bringt ein altes Postfach in eine Adresse, und openemail provider-imports holt ein Resend-Konto herüber. openemail calendar liest die in Mail gefundenen Termine, und openemail settings liest und ändert die Postfach-Einstellungen sowie die Signatur und das Tracking jeder Adresse.
- Eine ID sagt, was sie benennt:
file_für eine Datei,imp_für einen Postfach-Import,pimp_für einen Resend-Import undcal_für einen Kalendertermin, jeweils gefolgt von 24 Hexzeichen. Ein Download-Link hat eine eigene ID, ausfiles list-linksoderfiles create-link. --address-idbei einem Import ist die ID einer Adresse, ausopenemail domains list-addresses <id>, nicht die Adresse selbst.- Die Namespaces hören auch auf
file,import,provider-importoderproviderImportsundsetting. Verben nehmen die üblichen Aliasse, wo sie welche haben:lsfürlist,showundviewfürget,newundaddfürcreate,editfürsettings updateundrm,delundremovefürfiles delete. - Keiner dieser Befehle fragt eine Browser-Anmeldung nach einem Bestätigungscode. Die, die etwas endgültig ändern, bitten um Bestätigung, und
--yesantwortet für ein Skript. 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.
Dateien
openemail files liest und verwaltet jede Datei im Postfach: eingegangene Anhänge, ausgegangene Anhänge und auf die Seite Dateien hochgeladene Dateien. openemail open files öffnet dieselbe Seite in der Web-App.
| Befehl | Was es tut |
|---|---|
| openemail files list | Eine Seite Dateien auflisten, mit Name, Typ, Größe, Richtung, der Adresse, an die jede kam, und ob sie sich löschen lässt |
| openemail files get <id> | Eine Datei lesen, mit dem Thread und der Nachricht, zu denen sie gehört, ihrem usage und deletable |
| openemail files stats | Die Dateien und ihre Bytes zählen, aufgeteilt in empfangen, gesendet und hochgeladen, mit den häufigsten Typen und Adressen, den letzten 30 Tagen und den noch funktionierenden Links |
| openemail files download <id> | Die Bytes einer Datei genau so abrufen, wie sie gespeichert sind, in --out <file> oder auf stdout, wenn weitergeleitet |
| openemail files list-links <id> | Die Download-Links auflisten, als die eine Datei hinausging, neueste zuerst, mit der Zahl ihrer Abrufe und ob sie widerrufen wurden |
| openemail files create-link <id> | Die Datei unter einem neuen öffentlichen Download-Link veröffentlichen, der sich ohne Anmeldung öffnet |
| openemail files revoke-link <id> <link-id> | Einen öffentlichen Link endgültig stoppen, auch in bereits gesendeter Mail. Fragt nach einer Bestätigung |
| openemail files upload <data> | Eine Datei von einem Pfad oder über stdin mit - hochladen, bis 100 MB |
| openemail files delete <id> | Einen Upload, von dem nichts abhängt, endgültig löschen. Fragt nach einer Bestätigung |
| openemail files delete-many <ids...> | Bis zu 100 Dateien in einem Aufruf löschen und die behaltenen und nicht gefundenen melden. Fragt nach einer Bestätigung |
files listgrenzt mit--q(Name und Typ),--kind(image,pdf,audio,videoodertext),--direction(inbound,outboundoderuploaded),--address,--sinceund--untilein und sortiert mit--sort(newest,oldest,largestodername).--sinceund--untilnehmen ein ISO-8601-Datum oder eine Datumszeit:--sinceschließt seinen Zeitpunkt ein, und--untilendet davor.- Nur ein Upload, von dem nichts abhängt, lässt sich löschen, und
deletablesagt das im Voraus.usagesagt, was jede andere Datei hält:received,sent,linkedfür einen Upload, dessen Download-Link noch funktioniert, oderscheduledfür einen, der an einer noch nicht versandten Nachricht hängt.deletelehnt diese mit 409file_in_useab.delete-manylöscht, was es kann, listet den Rest mit je einem Grund inkeptund unbekannte IDs inmissing. uploadliest die Datei unter dem angegebenen Pfad und speichert sie unter dem Namen dieser Datei, mit dem Typ, den ihre Endung nahelegt.--filenameund--content-typeüberschreiben beides. Von stdin braucht-ein--filename, und ohne--content-typeist der Typapplication/octet-stream. Der Upload wartet bis zu 10 Minuten, was--timeout-msändert.- Die ID, die
uploadzurückgibt, hängt die Datei als{ "fileId": "…" }inopenemail emails send --attachmentsan einen Versand an, und so geht eine Datei über dem Inline-Limit von 5 MB hinaus. - Eine leere Datei ist 400
upload_empty, ein Programm oder Skript (nach seinem Namen beurteilt) ist 400upload_dangerous, und eine Datei über 100 MB ist 413upload_too_large. Ein Workspace behält bis zu 10 GB Uploads und nimmt 500 Uploads pro Stunde an. downloadbraucht in einem Terminal--out <file>und bricht ohne es mit Exit-Code2ab. Weitergeleitet gehen die Bytes auf stdout, und--out -verlangt ebenfalls stdout. Die ganze Datei wird im Speicher gehalten.create-linkerzeugt bei jedem Aufruf einen neuen Link mit eigener Download-Zahl, und der Link funktioniert, bis er widerrufen oder die Datei gelöscht wird. Er liegt auf der Datei-Domain von--domain, wenn diese Domain eine hat, etwafiles.acme.com, sonst auf der Datei-Domain der Adresse der Datei, sonst auf der API-Adresse. Ein Programm oder Skript wird mit 422file_unshareableabgelehnt.revoke-linklässt sich gefahrlos wiederholen: Ein bereits widerrufener Link kommt unverändert zurück.- Ein Schlüssel oder eine Anmeldung, die auf bestimmte Adressen oder Domains beschränkt ist, sieht nur die Dateien, die dort ankamen, nie die für den ganzen Workspace hochgeladenen, und eigene Uploads gehören zur ersten Adresse, die er umfasst.
- Der Dateiindex beginnt an dem Tag, an dem er ausgeliefert wurde. Ältere Anhänge hängen noch an ihren Nachrichten, wo
openemail threads list-attachments <id>sie liest.
Postfach-Importe
openemail imports bringt ein altes Postfach in eine Adresse: Google-Takeout-Archive, .mbox-Dateien aus Apple Mail, Thunderbird und den meisten Desktop-Apps, .eml-Dateien und .zip- oder .tgz-Archive, die eines davon enthalten, bis zu 100 GB pro Datei und 50 Dateien pro Import. Threads, Daten und Labels kommen mit. Importierte Mail ist still: Sie löst keine Regeln, Weiterleitungen, Benachrichtigungen, Zusammenfassungen oder Webhooks aus.
import-files ist der, den die meisten brauchen: Er legt den Import an, lädt jede Datei in Teilen mit einer Fortschrittszeile hoch und startet ihn. Die anderen Verben sind diese Schritte einzeln, um einen abgebrochenen Upload fertigzustellen oder ihn selbst zu steuern. create gibt den Plan zurück, chunkBytes und die chunks jeder Datei, upload-chunk sendet einen Teil, upload-state sagt, welche Teile angekommen sind, und start stellt den Import in die Warteschlange. openemail open imports zeigt dieselben Importe in der Web-App.
| Befehl | Was es tut |
|---|---|
| openemail imports list | Eine Seite der Importe im Workspace auflisten, neueste zuerst, mit Status, gelesenen Bytes und Zahlen. --address-id behält eine Adresse |
| openemail imports get <id> | Einen Import mit Status, Fortschritt und Zahlen lesen. Fragen Sie ihn ab, bis er completed, failed oder cancelled meldet |
| openemail imports create --address-id <value> --files <json|@file|-> | Einen Import aus einer Liste von { name, bytes } anlegen und seinen Upload-Plan erhalten, mit status uploading |
| openemail imports upload-state <id> | Für jede Datei die Indizes der schon gespeicherten Teile, sodass ein abgebrochener Upload nur das Fehlende sendet |
| openemail imports upload-chunk <id> <file> <chunk> <data> | Einen Teil einer Datei hochladen, von einem Pfad oder über stdin mit -. Ein erneut gesendeter Teil ersetzt den alten |
| openemail imports start <id> | Prüfen, dass jeder Teil angekommen ist, das Format jeder Datei erkennen und den Import in die Warteschlange stellen |
| openemail imports cancel <id> | Den Import am nächsten Kontrollpunkt stoppen. Bereits importierte Mail bleibt. Fragt nach einer Bestätigung |
| openemail imports list-failures <id> | Jede Nachricht oder jeden Archiveintrag auflisten, der nicht mitkam, mit dem Grund |
| openemail imports delete-upload <id> | Die hochgeladenen Dateien löschen. Bereits importierte Mail bleibt. Fragt nach einer Bestätigung |
| openemail imports import-files --address-id <value> --files <path> | Einen Import mit einem Befehl anlegen, hochladen und starten und zurückkehren, sobald er in der Warteschlange steht |
- Die Adresse muss auf den eigenen Domains des Workspace liegen, und der Schlüssel oder die Anmeldung muss für sie handeln dürfen. Pro Adresse läuft nur ein Import: Ein weiterer, während einer in der Warteschlange steht oder läuft, ist 409
already_running. import-filesnimmt--fileseinmal pro Datei oder mehrere durch Kommas getrennte Pfade und sendet jede unter ihrem eigenen Dateinamen.--optionsnimmt JSON wie{"keepInbox":false,"includeSpam":true}. Beicreatesind dieselben drei Schalter:--options-keep-inbox,--options-include-spamund--options-include-trash, jeweils mit vorangestelltem--no-ausgeschaltet, wie in--no-options-keep-inbox.keepInboxist standardmäßig an, Mail aus dem alten Posteingang landet also mit ihrem Ungelesen-Status im Posteingang. Ausgeschaltet wird alles unter Archiv abgelegt. Spam und Papierkorb bleiben zurück, außer Sie schließen sie ein.createnimmt--filesals JSON, inline oder aus einer Datei mit@path, und jedesbytesmuss genau die Größe der Datei haben, die Sie dann hochladen.- Jeder Teil ist genau
chunkByteslang, außer dem letzten Teil einer Datei, und ein Teil mit falscher Länge ist 400bad_chunk.startlehnt eine Datei mit fehlenden Teilen mit 412missing_chunksab und eine, die weder Archiv noch Postfach ist, mit 400unsupported_file. Bei einem Import, deruploadingschon verlassen hat, gibt es den Import unverändert zurück. - Scheitert ein Teil auch nach seinen Wiederholungsversuchen, bricht
import-filesab, und der Import bleibt inuploading. Der Block unten sendet die fehlenden Teile der ersten Datei und startet ihn. - Ein Import meldet
processedBytesvontotalBytesundcountsmitseen,imported,duplicate,filtered,failedundthreads.lastErrorist nur gesetzt, wennstatusfailedist. list-failuresgibt jedem Fehler einenreason:too-large(über 50 MB),unparseable,no-date,storage-error,unreadable-entry,encrypted-entryoderarchive-limit, mit Betreff und Absender, wo sie lesbar waren.cancelbei einem abgeschlossenen Import ist 409not_cancellable.delete-uploadbricht einen Import ab, der noch hochlädt, und lehnt einen, der in der Warteschlange steht oder läuft, mit 409still_runningab, brechen Sie diesen also zuerst ab.
openemail imports get "$import_id" --json > import.jsonopenemail imports upload-state "$import_id" --json > state.jsonchunk=$(jq .chunkBytes import.json)chunks=$(jq '.files[0].chunks' import.json)for i in $(seq 0 $((chunks - 1))); do jq -e --argjson i "$i" '.received[0] | any(. == $i)' state.json > /dev/null && continue dd if=takeout-001.zip bs="$chunk" skip="$i" count=1 2> /dev/null | openemail imports upload-chunk "$import_id" 0 "$i" -doneopenemail imports start "$import_id"Importe von Resend
openemail provider-imports holt einen Workspace mit einem einzigen Resend-API-Schlüssel mit Vollzugriff von Resend herüber. Sperreinträge behalten ihren Grund, Segmente werden zu Zielgruppen, angemeldete Kontakte kommen mit ihren Namen, und Vorlagen kommen als HTML-Vorlagen mit deklarierten Variablen. Webhooks werden ausgeschaltet registriert, weil Zustellungen hier anders signiert werden. Ein Signaturschlüssel oder ein Token kann Resend nicht verlassen, daher kommen Domains und API-Schlüssel stattdessen als Checkliste im Bericht zurück.
| Befehl | Was es tut |
|---|---|
| openemail provider-imports inspect <api-key> | Vor dem Import zählen, was das Resend-Konto enthält, pro Ressource. Nichts wird gespeichert, und der Schlüssel wird nicht behalten |
| openemail provider-imports create --resend-key <value> --resources <a,b> | Einen Import der Ressourcen, die Sie nennen, in die Warteschlange stellen |
| openemail provider-imports list | Eine Seite der Importe von Versandanbietern auflisten, neueste zuerst, jeder mit seinem Bericht |
| openemail provider-imports get <id> | Einen Import lesen: seinen Status, den Schritt, in dem er ist, und den bisherigen Bericht |
| openemail provider-imports cancel <id> | Den Import stoppen und den Resend-Schlüssel löschen. Was schon herübergekommen ist, bleibt. Fragt nach einer Bestätigung |
- Übergeben Sie den Resend-Schlüssel als
@path, um ihn aus einer Datei zu lesen, oder als-, um ihn von stdin zu lesen, damit er nicht in Ihrem Shell-Verlauf und in der Prozessliste landet. Ein auf der Kommandozeile getippter Schlüssel funktioniert weiterhin, mit einer Warnung.--dry-rungibt den Body mit geschwärztem Schlüssel aus. --resourcesnimmt beliebige vonsuppressions,audiences,contacts,templates,webhooks,domainsundapi-keys, durch Kommas getrennt oder wiederholt.- Ein reiner Versandschlüssel ist 400
restricted_key. Legen Sie für den Import bei Resend einen Schlüssel mit Vollzugriff an und widerrufen Sie ihn danach. inspectliest die erste Seite jeder Ressource und gibtcountszurück, ein{ count, more }pro Ressource, wobeimoregesetzt ist, wo eine Ressource über ihre erste Seite hinausgeht.- Pro Workspace läuft jeweils ein Import, und ein zweiter ist 409
already_running. Denselben Import zweimal auszuführen verdoppelt nichts. Der Schlüssel wird nur verschlüsselt gehalten, solange der Import läuft, und gelöscht, wenn er endet, scheitert oder abgebrochen wird. - Kontakte, die sich bei Resend abgemeldet haben, bleiben draußen und werden in
report.contacts.unsubscribedgezählt. report.domainslistet jede Resend-Domain mit einemstate:absent, wenn sie nicht in diesem Workspace ist,added, wenn sie es ist, aber nicht verifiziert, undverified, mit den Einträgen, die sie bei Resend hatte. Fügen Sie eine fehlende mitopenemail domains createhinzu.report.apiKeysnennt die Schlüssel, die mitopenemail keys createneu anzulegen sind.- Mit einer Browser-Anmeldung darf nur der Eigentümer des Workspace diese Befehle nutzen, und ein Mitglied bekommt 403
owner_only. Für einen API-Schlüssel gilt das nicht. Ein Schlüssel oder eine Anmeldung, die auf bestimmte Adressen oder Domains beschränkt ist, kann keinen Import prüfen oder anlegen, da Zielgruppen, Sperreinträge und Vorlagen dem ganzen Workspace gehören. createbraucht außerdem den Scope jeder Ressource, die es hereinholt:audiences:writefür Zielgruppen,contacts:writeundaudiences:writefür Kontakte,templates:writefür Vorlagen,webhooks:writefür Webhooks unddomains:readfür Domains.
Kalender
openemail calendar liest die in Mail gefundenen Kalendertermine. Alle drei Befehle lesen nur. list-events entfaltet jeden Termin in seine Vorkommen innerhalb eines Zeitraums, den Sie angeben, sodass ein wöchentliches Meeting eine Zeile pro Woche ist, und get-event und get-event-ics lesen einen Termin vollständig. openemail open calendar öffnet den Kalender in der Web-App.
| Befehl | Was es tut |
|---|---|
| openemail calendar list-events --from <when> --to <when> | Eine Seite Vorkommen zwischen zwei Zeitpunkten auflisten, nach Startzeit sortiert, jedes über eventId auf seinen Termin verweisend |
| openemail calendar get-event <id> | Einen Termin mit seinen Teilnehmern und ihren Antworten, seiner Wiederholungsregel, ausgenommenen Daten, Organisator und Erinnerungen lesen |
| openemail calendar get-event-ics <id> | Den Termin als iCalendar-Dokument herunterladen, ausgegeben oder nach --out <file> geschrieben |
--fromund--tosind ISO-8601-Datumszeiten wie2026-10-01T00:00:00Z.--tomuss nach--fromliegen und höchstens 366 Tage später, da eine sich wiederholende Serie kein Ende hat, bis zu dem sich auflisten ließe. Eine fehlende Grenze ist 422invalid_parameter. Eine Grenze, die sich nicht parsen lässt, ein umgekehrter oder zu langer Zeitraum oder eine unbekannte Zone ist 400invalid_parameter.--timezoneist eine IANA-Zone wieEurope/London, UTC, wenn weggelassen. Sie entfaltet die Termine, die ohne eigene Zone gespeichert sind, und das entscheidet, auf welchen Tag ein ganztägiger Termin fällt.get-eventundget-event-icsnehmen dieeventIdeines Vorkommens, nicht die iCalendar-uid. Eine wiederkehrende Serie ist ein Termin, ihrstartundendbeschreiben also das erste Vorkommen.- Abgesagte Termine werden auch aufgelistet, mit
statusCANCELLED.myPartstatist die Antwort, die für eine beliebige Adresse erfasst wurde, die der Workspace auf seinen eigenen Domains hat, und null, wenn keine davon Teilnehmer ist. - Geblättert wird mit
--cursorund demselben Zeitraum. Ein Schlüssel oder eine Anmeldung, die auf bestimmte Adressen beschränkt ist, sieht nur die Termine, die eine davon organisiert oder besucht, und jeder andere Termin ist ein 404. get-event-icsdeklariertMETHOD:PUBLISH, ein Import zeigt den Termin also so, wie er ist, statt anzubieten, ihn anzunehmen oder abzulehnen. Termine mit Uhrzeit werden als UTC-Zeitpunkte geschrieben und ganztägige Termine als Daten.DTSTAMPist die Zeit des Downloads, zwei Downloads eines unveränderten Termins unterscheiden sich also in dieser Zeile.
Einstellungen
openemail settings liest und ändert die Postfach-Einstellungen, etwa Zeitzone, Sprache, Zeitformat und die Blocklisten. Vier Einstellungen gehören zu einer Adresse statt zum Workspace: signature, openEmailSignature (die OpenEmail-Fußzeile), trackOpens und trackClicks. Nennen Sie die Adresse mit --address, oder *@acme.com für den Catch-all einer Domain.
| Befehl | Was es tut |
|---|---|
| openemail settings get | Jede Einstellung lesen, mit ausgefüllten Standardwerten. Mit --address lesen sich die vier adressbezogenen Einstellungen so, wie ein Versand von dieser Adresse sie auflöst |
| openemail settings update | Die übergebenen Einstellungen ändern und den Rest behalten. Die Antwort ist jede Einstellung, nach dem Schreiben zurückgelesen |
- Ohne
--addressliestgetdie vier adressbezogenen Einstellungen als eingebaute Standardwerte: keine Signatur, die OpenEmail-Fußzeile an und Öffnungs- und Link-Tracking an. Mit ihm kommen sie aus den eigenen Werten der Adresse, dann aus dem Catch-all ihrer Domain, wenn der Catch-all diese Adresse aufgefangen hat, dann aus den Standardwerten. Eine Plus-Adresse ohne eigene Einstellungen liest die ihrer Basisadresse. - Ohne
--addresslehntupdate--signature,--open-email-signature,--track-opensund--track-clicksmit 422address_requiredab und schreibt nichts. Mit ihm nimmtupdatenur diese vier, und alles andere ist 422not_per_address. Die Adresse muss in diesem Workspace sein, oder*@domainfür eine hier verifizierte Domain mit eingeschaltetem Catch-all. - Die Schalter werden mit vorangestelltem
--no-ausgeschaltet:--no-open-email-signature,--no-track-opensund--no-track-clicks. --signatureist HTML mit höchstens 150.000 Zeichen, beim Schreiben bereinigt, sodass das Zurückgelieferte das ist, was gesendet wird. Ein leerer String entfernt sie. Ob ein Versand sie hinzufügt, entscheidet der Versand: siehe--signatureinopenemail emails send --help.- Die Flags decken die üblichen Felder ab.
--datanimmt jede gespeicherte Einstellung als JSON, inline, aus einer Datei mit@pathoder von stdin mit-, etwatimeFormat,weekStart,undoSendEnabled,blockedSendersoderblockedDomains. Schlüssel, die die Einstellungen nicht kennen, werden ohne Fehler verworfen, und ein bekannter Schlüssel mit falschem Typ ist 422invalid_parameter. - Eine Liste wie
blockedDomainswird vollständig ersetzt, lesen Sie sie also zuerst und senden Sie sie mit Ihrer Änderung zurück, wie es das Beispiel unten tut. Ein Blocklisten-Eintrag, der zu kurz für eine Regel ist, ist 422blocklist_entry_too_broad. --timezoneund--languagewerden wie angegeben gespeichert, ohne Prüfung, prüfen Sie eine Zone oder einen Sprachcode also, bevor Sie ihn senden.- Die Datenschutzfelder
externalImages,trustedSenders,blockedSenders,blockedDomains,blockedWordsunduseDefaultBlockedWordsgehören dem Workspace. Ein Schlüssel oder eine Anmeldung, die auf bestimmte Adressen oder Domains beschränkt ist, kann sie nicht ändern und darf in--addressnur eine Adresse nennen, die er umfasst, oder einen Catch-all auf einer Domain, die er vollständig umfasst. Beide Ablehnungen sind 422capability_unsupported. - Ein Update ohne Inhalt ändert nichts und gibt die aktuellen Einstellungen zurück.
defaultEmailAliaswählt nur die From-Adresse im Composer der Web-App vor, und die API nutzt es nie, um einen Absender zu wählen.
Beispiele
file_id=$(openemail files upload ./price-list.pdf --json | jq -r .id)openemail files create-link "$file_id" --domain acme.com --json | jq -r .urlopenemail files list-links "$file_id"openemail files download "$file_id" --out copy.pdfJedes create-link erzeugt einen neuen Link, führen Sie es also einmal aus und lesen Sie den Link mit list-links zurück. revoke-link stoppt ihn später, auch in bereits versandter Mail.
openemail files list --direction uploaded --all | jq -r 'select(.deletable) | .id' > deletable.txtwc -l < deletable.txtxargs -r -n 100 openemail files delete-many --yes --json < deletable.txt | jq -c '.kept[]'Mit --all in einer Pipe gibt files list eine Datei pro Zeile aus. xargs -n 100 übergibt delete-many höchstens 100 IDs pro Aufruf, und jede Datei, die inzwischen genutzt wird, kommt mit ihrem Grund in kept zurück, statt den Aufruf scheitern zu lassen.
domain_id=$(openemail domains list --all | jq -r 'select(.domain == "acme.com") | .id')address_id=$(openemail domains list-addresses "$domain_id" --all | jq -r 'select(.address == "[email protected]") | .id')openemail imports import-files --address-id "$address_id" --files ~/Downloads/takeout-001.zip --files ~/Downloads/takeout-002.zip --json > import.jsonimport_id=$(jq -r .id import.json)until openemail imports get "$import_id" --json | jq -e '.status != "queued" and .status != "running"' > /dev/null; do sleep 60doneopenemail imports get "$import_id" --json | jq '{status, counts, lastError}'openemail imports list-failures "$import_id" --json | jq -r '.data[] | [.reason, .subject] | @tsv'--dry-run bei import-files gibt das POST /imports aus, das es senden würde, mit Name und Größe jeder Datei, und lädt nichts hoch. list-failures liest jeweils 100: Übergeben Sie den ausgegebenen nextCursor als --after für die nächste Seite.
openemail provider-imports inspect @resend-key.txtopenemail provider-imports create --resend-key @resend-key.txt --resources suppressions,audiences,contacts,templates,webhooks,domains,api-keys --json > resend.jsonpimp_id=$(jq -r .id resend.json)until openemail provider-imports get "$pimp_id" --json | jq -e '.status != "queued" and .status != "running"' > /dev/null; do sleep 10doneopenemail provider-imports get "$pimp_id" --json | jq '.report | {contacts, domains: [.domains[] | {name, state}], apiKeys: [.apiKeys[].name]}'openemail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-11-01T00:00:00Z --timezone Europe/London --all | jq -r 'select(.status != "CANCELLED") | [.start, .summary, .myPartstat] | @tsv'openemail calendar get-event cal_8d3f0a2b9c4e41f7a6b5c2d1 --json | jq '.attendees[] | {email, partstat}'openemail calendar get-event-ics cal_8d3f0a2b9c4e41f7a6b5c2d1 --out standup.icsopenemail settings get --address [email protected] --json | jq '{signature, openEmailSignature, trackOpens, trackClicks}'openemail settings update --address [email protected] --signature "$(cat signature.html)" --no-track-clicks --dry-runopenemail settings update --address [email protected] --signature "$(cat signature.html)" --no-track-clicksopenemail settings update --address '*@acme.com' --no-track-opensopenemail settings update --timezone Europe/London --language enopenemail settings get --json | jq -c '{blockedDomains: ((.blockedDomains + ["spam.example"]) | unique)}' | openemail settings update --data -Der Probelauf gibt das PATCH /settings?address=sales%40acme.com und seinen Body aus, ohne es zu senden. Die Catch-all-Zeile setzt das Tracking für jede Adresse, die der Catch-all von acme.com auffängt, und die letzte Zeile fügt der Blockliste eine Domain hinzu, ohne die anderen fallen zu lassen.
Scopes, Bestätigungen und Fehler
| Scope | Befehle |
|---|---|
| files:read | files list, get, stats, download, list-links |
| files:write | files create-link, revoke-link, upload, delete, delete-many |
| threads:read | imports list, get, list-failures |
| threads:write | imports create, upload-state, upload-chunk, start, cancel, delete-upload, import-files |
| settings:read | provider-imports list, get und settings get |
| settings:write | provider-imports inspect, create, cancel und settings update |
| calendar:read | calendar list-events, get-event, get-event-ics |
- Eine Anmeldung oder ein Schlüssel ohne den Scope bricht mit Exit-Code
4ab, nennt den fehlenden Scope und sagt, wie Sie ihn bekommen. files revoke-link,files delete,files delete-many,imports cancel,imports delete-uploadundprovider-imports cancelbitten um Bestätigung. Eine Antwort mit Nein endet mit Exit-Code10und ändert nichts. Unbeaufsichtigt und ohne--yesbrechen sie mit Exit-Code2ab, bevor etwas gesendet wird.- Kein Befehl hier fragt nach einem Bestätigungscode, weder mit einer Browser-Anmeldung noch mit einem API-Schlüssel, daher braucht ein Skript nur
--yes. --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. Ein Datei-Body wird als seine Größe und sein Typ angezeigt.files list,files list-links,imports list,provider-imports listundcalendar list-eventslesen eine Seite:--limitnimmt 1 bis 100, und der Server sendet 25, wenn es fehlt, und--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--jsongeben sie ein einziges{ items, hasMore, nextCursor }-Dokument aus.imports list-failuresblättert auf eigene Weise:--afternimmt dennextCursorder vorigen Seite,--limitist höchstens 100, der Standard, und es gibt kein--all. Mit--jsongibt es{ object, data, nextCursor }aus.- Lesezugriffe und die Änderungen, die zweimal ausgeführt dasselbe Ergebnis haben, werden nach einem Netzwerkfehler wiederholt:
files revoke-link,imports upload-chunk,imports startundsettings update. Jede andere Änderung wird einmal gesendet. Sehen Sie nach einer verlorenen Antwort nach, bevor Sie es erneut versuchen: Ein zweitesuploadspeichert eine zweite Kopie, und ein zweitescreate-linkerzeugt einen zweiten Link, ein 404 bei Ihrem zweitenfiles deletebedeutet, dass das erste funktioniert hat, und ein zweitesdelete-manylistet inmissing, was das erste gelöscht hat. - Eine Ablehnung endet mit dem Code ihres Status:
4für ein 403,5für ein 404,6für ein 409,7für ein 400 oder ein 422 und8für ein 429.