Domains und Adressen
Domains hinzufügen und verifizieren, die nötigen DNS-Einträge lesen, die Adressen darauf verwalten und prüfen, als wer Sie senden können.
Überblick
Zwei Namespaces decken Ihre Domains ab. openemail domains verwaltet die Domains des Workspace: sie hinzufügen und entfernen, die DNS-Einträge, die jede braucht, ob sie empfangen und senden kann, ihren Catch-all, ihre Tracking- und Datei-Domain und die Adressen darauf. openemail addresses beantwortet eine engere Frage: als welche Adressen der Schlüssel oder die Anmeldung, die Sie nutzen, senden darf.
- Ein Domain-Befehl nimmt die Domain-ID, eine UUID aus
domains listoderdomains create. Der Hostname wird an ihrer Stelle nicht angenommen,openemail domains get acme.comist also ein 404 und endet mit Exit-Code5. - Ein Adressbefehl nimmt die Domain-ID und dann die Adress-ID, eine UUID aus
domains list-addressesoderdomains create-address. domainundaddressfunktionieren auch als Namespace-Namen. Die Domain-Verben hören auf die üblichen Aliasse wiels,show,new,editundrm, ebensoaddresses list. Die fünf Verben für die Adressen einer Domain, etwacreate-address, haben keine.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 domains list | Die Domains des Workspace alphabetisch auflisten, mit ihrem Stand bei Empfang, Versand, Tracking und Dateien |
| openemail domains get <id> | Eine Domain lesen, mit ihren Adressen, jedem DNS-Eintrag, den sie nutzt, und ob er gefunden wurde, sowie ihrer DMARC-Auswertung |
| openemail domains create --domain <value> | Eine Domain hinzufügen. Die Antwort enthält jeden zu veröffentlichenden DNS-Eintrag, bereits einmal geprüft |
| openemail domains verify <id> | Das DNS der Domain sofort prüfen und die Domain so zurückgeben, wie die Prüfung sie hinterlassen hat |
| openemail domains update <id> | Den Catch-all ein- oder ausschalten und die Tracking-Domain und die Datei-Domain setzen oder entfernen |
| openemail domains delete <id> | Die Domain und jede Adresse darauf entfernen. Fragt nach einer Bestätigung |
| openemail domains list-addresses <id> | Die Adressen einer Domain auflisten, mit ihren IDs, Bezeichnungen, ihrem Aktivierungsstatus und wann jede zuletzt Mail empfangen hat |
| openemail domains create-address <id> --local-part <value> | Eine Adresse auf der Domain anlegen, aktiviert, mit optionalem --label |
| openemail domains get-address <id> <address-id> | Eine Adresse auf einer Domain lesen |
| openemail domains update-address <id> <address-id> | Eine Adresse mit --label umbenennen oder sie mit --no-enabled und --enabled aus- und einschalten |
| openemail domains delete-address <id> <address-id> | Eine Adresse von ihrer Domain entfernen. Fragt nach einer Bestätigung |
| openemail addresses list | Die Adressen auflisten, als die Sie mit diesem Schlüssel oder dieser Anmeldung senden dürfen, und den Empfangs- und Versandstatus jeder Domain |
Jedes Flag steht in der Hilfe seines Befehls, zum Beispiel openemail domains update --help oder openemail domains create-address --help.
Empfang und Versand
Eine Domain meldet zwei voneinander unabhängige Tatsachen. receiving.verified ist true, sobald das öffentliche DNS mit ihren MX-Einträgen und ihrem TXT-Eintrag _openemail-challenge antwortet, und von da an empfängt sie Mail. sending.status ist der Signierstatus, wie ihn die letzte Prüfung gesehen hat: verified, pending, failed, no_identity oder unknown. sending.canSend sagt, ob ein Versand von der Domain gerade angenommen würde, und ein negatives Urteil, das älter als ein Tag ist, gilt als unbekannt, ein Skript sollte also nach canSend verzweigen statt nach status. Solange es false ist, wird ein Versand von der Domain mit 409 domain_not_sendable abgelehnt.
domains createführt die erste DNS-Prüfung während des Aufrufs aus, daher trägt jeder Eintrag inrecordsbereits einenstatus:found,missingoder null, wenn er noch nicht geprüft wurde. Veröffentlichen Sie jeden Eintrag genau wie angegeben, denn die Werte sind spezifisch für die Domain.domains verifyprüft sofort. Innerhalb von 10 Sekunden nach der letzten Prüfung prüft es nichts Neues und gibt die Domain so zurück, wie sie ist. Bei einer verifizierten Domain prüft es die Signiereinträge erneut, sodasssendingaktuell ist.domains getprüft bei einer nicht verifizierten Domain erneut, wenn die letzte Prüfung mehr als 20 Sekunden zurückliegt, daher funktioniert auch das Abfragen mitget, und es braucht nurdomains:read, woverifydomains:writebraucht.- Ein gerade veröffentlichter Eintrag kann einige Minuten brauchen, bis er im öffentlichen DNS erscheint.
In einem Terminal geben get, create und verify ein Feld pro Zeile aus, mit verschachtelten Blöcken wie receiving, sending und records als kompaktem JSON. Fügen Sie --json hinzu und lesen Sie sie mit einem Tool wie jq, wie es die Beispiele unten tun.
Catch-all, Tracking- und Datei-Domains
domains update ändert drei Einstellungen, die nicht voneinander abhängen. Ein Flag, das Sie weglassen, bleibt unberührt, und ganz ohne Flags kommt die Domain unverändert zurück.
| Flag | Was es ändert |
|---|---|
| --catch-all, --no-catch-all | Eingeschaltet nimmt er Mail an jede Adresse der Domain an, die niemand angelegt hat, und die Adresse erscheint ab ihrer ersten Nachricht in list-addresses. Ausgeschaltet lehnt er Mail an jede Adresse ab, die nicht von Hand angelegt wurde, auch an die, die der Catch-all vorher aufgefangen hat. Eine neue Domain startet mit eingeschaltetem Catch-all |
| --tracking-host <value> | Eine Subdomain wie links.acme.com für getrackte Links und das Öffnungs-Pixel. null entfernt sie |
| --storage-host <value> | Eine Subdomain wie files.acme.com für die Download-Links von Dateien, die von der Domain gesendet werden. null entfernt sie |
- Ein neuer Host wird im selben Aufruf gespeichert und geprüft. Veröffentlichen Sie einen CNAME-Eintrag mit dem Namen
record.nameund dem Wertrecord.valueaus dem Blocktrackingoderstorageder Antwort, mit ausgeschaltetem Proxying. Wird ein Host erneut eingerichtet, kann er einen anderen Wert bekommen, veröffentlichen Sie also den, den die neueste Antwort meldet. - Bis eine Prüfung besteht, steht der Host auf
pending, und neue Mail behält den Standard-Host von OpenEmail. Sobald eine besteht, steht er aufactive. OpenEmail prüft selbstständig weiter, und ein aktiver Host, der drei Prüfungen in Folge nicht besteht oder dessen letzte bestandene Prüfung 2 Stunden zurückliegt, steht auffailed, während neue Mail zum Standard-Host zurückkehrt. - Entfernen Sie einen Host mit
null, wie in--tracking-host null. Ein leerer Wert wie--tracking-host=ist in der CLI ein Nutzungsfehler und endet mit Exit-Code2. - Ein neuer Host braucht eine verifizierte Domain oder zumindest ihren veröffentlichten TXT-Eintrag
_openemail-challenge. Andernfalls wird der Aufruf mit 409domain_not_verifiedabgelehnt. - Die Flags gelten der Reihe nach: der Catch-all, dann die Tracking-Domain, dann die Datei-Domain. Ein späteres Flag, das abgelehnt wird, kann eine frühere Änderung gespeichert lassen, senden Sie sie also in getrennten Aufrufen, wenn jede für sich bestehen muss.
Adressen auf einer Domain
Eine Domain enthält die Adressen, die von Hand oder über die API angelegt wurden, und die, die ihr Catch-all aufgefangen hat, als zum ersten Mal Mail für sie ankam. list-addresses zeigt beide Arten, deaktivierte eingeschlossen. Der Catch-all selbst ist keine Zeile: Er ist receiving.catchAll an der Domain.
create-addressnimmt--local-part, den Teil vor dem @, und ein optionales--label. Die Domain muss noch nicht verifiziert sein, aber die Adresse empfängt nichts, bis sie es ist.*allein wird abgelehnt, da so der Catch-all geschrieben wird.- Eine Adresse anzulegen, die schon existiert oder entfernt wurde, ist kein Fehler. Sie kommt aktiviert zurück, mit der gesendeten Bezeichnung oder ohne, und behält ihre ID. Eine vom Catch-all aufgefangene Adresse wird zu einer von Hand angelegten, sodass sie weiter empfängt, nachdem der Catch-all ausgeschaltet wurde.
- Mit eingeschaltetem Catch-all startet eine neue Adresse mit den adressbezogenen Einstellungen des Catch-all, etwa seiner Signatur und seinem Tracking, abgesehen von den Datenschutzeinstellungen. Sie werden einmal kopiert und nicht synchron gehalten.
update-address --no-enabledhindert die Adresse daran, Mail anzunehmen, sodass Absender einen Bounce bekommen, und von ihr kann nichts gesendet werden. Sie behält ihre Mail, ihre Einstellungen und die Personen, die sie erreichen können, und--enabledmacht dort weiter, wo sie aufgehört hat.--labelbenennt sie um, und--label nullentfernt den Namen.delete-addressgeht weiter. Mail an die Adresse wird selbst mit eingeschaltetem Catch-all abgelehnt, ihre Weiterleitung endet, ihre Einstellungen werden gelöscht, die Personen, denen Zugriff gewährt wurde, verlieren ihn, und ihre Passwort-Anmeldung wird widerrufen. Mail, die sie schon empfangen hat, bleibt im Postfach. Wird sie erneut angelegt, kommt dieselbe ID zurück, ohne die alten Einstellungen oder Zugriffe.
Als wer Sie senden können
openemail addresses list beantwortet die Frage hinter einem 403 from_address_forbidden: welche Adressen der Schlüssel oder die Anmeldung, mit der Sie aufrufen, in From setzen darf. Es braucht emails:send statt eines Lese-Scopes, weil es beschreibt, was ein Versand annehmen würde.
- In einem Terminal gibt es zwei Tabellen aus: die Adressen, jeweils damit, ob sie aktiviert ist und ob Sie von ihr senden können, dann die Domains, jeweils damit, ob sie für Empfang und Versand verifiziert ist, und ihrem Catch-all.
unrestrictedist true, wenn die Anmeldedaten durch nichts eingeschränkt sind. Dann kann von jedem Local-Part auf den Domains des Workspace gesendet werden, auch von solchen, die niemand angelegt hat. Andernfalls istcanSendnur für eine aktivierte Adresse true, die die Anmeldedaten abdecken, über eine ganze Domain, die sie umfassen, oder über ihre eigene Adressliste.canSendist false für eine deaktivierte Adresse, für eine, die die Anmeldedaten nicht abdecken, und für eine, deren Domain noch nicht signieren kann.- Aufgelistet werden nur angelegte Adressen. Anmeldedaten, die eine ganze Domain umfassen, können trotzdem als jeder Local-Part darauf senden, und von einer Adresse auf ihrer Liste ohne Postfach dahinter kann gesendet werden, ohne dass sie hier erscheint.
- Mit
--jsongibt es für eine Seite{ unrestricted, addresses, domains, hasMore, nextCursor }aus und mit--all{ unrestricted, addresses, domains }, statt des{ items, hasMore, nextCursor }-Dokuments, das andere Listen ausgeben. Mit--allin einer Pipe oder mit--ndjsongibt es eine Adresse pro Zeile aus.
status, open und DNS-Anbieter
openemail status liest Ihre Anmeldung, addresses list und domains list gleichzeitig und gibt sie zusammen aus. Seine Tabelle Sender addresses zeigt jede Adresse damit, ob sie senden kann und ob sie aktiviert ist. Seine Tabelle Domains zeigt jede Domain als verified oder not verified für den Empfang, ihren Versandstatus und ihren Catch-all. Es zeigt jeweils die ersten 100 und nennt den --all-Befehl für den Rest.
- Ein Teil, den Ihre Anmeldedaten nicht lesen dürfen, etwa die Domains ohne
domains:readoder die Adressen ohneemails:send, zeigt Not available mit dem Grund, und der Rest wird trotzdem ausgegeben. - Gibt es noch keine Adressen, schlägt es
openemail domains create --domain example.comvor. openemail status --jsongibt ein Objekt mitaccount,addresses,domainsundunavailableaus, wobeiunavailableden Grund für jeden Teil nennt, der nicht gelesen werden konnte.
Das Verknüpfen eines DNS-Anbieters, damit die Einträge einer neuen Domain für Sie geschrieben werden, geht in 0.0.2 nur in der Web-App. openemail open providers oder open dns öffnet diese Seite. open domains öffnet die Domains und ihre DNS-Einträge, und open addresses die Adressen. Weiterleitung ist ebenfalls in der Web-App, und open forwarding <address> öffnet sie für eine Adresse. --print gibt den Link aus, statt einen Browser zu öffnen.
Wo OpenEmail das DNS einer Domain selbst geschrieben hat, nimmt domains delete diese Einträge zurück und listet alle, bei denen das nicht gelang, in leftBehind, damit Sie sie bei Ihrem DNS-Anbieter entfernen. Einträge, die Sie selbst veröffentlicht haben, werden nie angefasst, entfernen Sie sie also ebenfalls, sobald die Domain weg ist.
Beispiele
openemail domains create --domain acme.com --json > acme.jsonjq -r '.records[] | [.type, .name, .value, (.priority // "")] | @tsv' acme.jsonopenemail domains verify "$(jq -r .id acme.json)"id=b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6funtil openemail domains get "$id" --json | jq -e .receiving.verified > /dev/null; do sleep 30doneopenemail domains get "$id" --json | jq '.sending | {status, canSend, error}'openemail domains list-addresses "$id" --allopenemail domains create-address "$id" --local-part invoices --label Invoicesopenemail domains update "$id" --no-catch-all --dry-runopenemail domains update "$id" --no-catch-allWird invoices von Hand angelegt, empfängt es weiter, sobald der Catch-all aus ist, während Mail an jede andere vom Catch-all aufgefangene Adresse abgelehnt wird. Der Probelauf gibt das PATCH und seinen Body aus, ohne es zu senden.
openemail domains update "$id" --tracking-host links.acme.com --json | jq '.tracking | {status, record, error}'openemail domains update "$id" --tracking-host nulladdress_id=$(openemail domains list-addresses "$id" --all | jq -r 'select(.address == "[email protected]") | .id')openemail domains update-address "$id" "$address_id" --no-enabledopenemail domains delete-address "$id" "$address_id" --yesDie Adresse zuerst auszuschalten lässt sich mit --enabled rückgängig machen. Das Löschen nicht, und in einem Skript braucht es --yes. Mit einer Browser-Anmeldung fragt es auch nach einem Bestätigungscode, den --yes nie überspringt.
openemail domains list --all | jq -r 'select(.sending.canSend | not) | [.domain, .sending.status] | @tsv'openemail addresses list --all --json | jq -r '.addresses[] | select(.canSend) | .address'Scopes, Bestätigungen und Fehler
| Scope | Befehle |
|---|---|
| domains:read | domains list, get, list-addresses, get-address |
| domains:write | domains create, verify, update, delete, create-address, update-address, delete-address |
| emails:send | addresses list |
- Eine Anmeldung oder ein Schlüssel ohne den Scope bricht mit Exit-Code
4ab, nennt den fehlenden Scope und sagt, wie Sie ihn bekommen. domains deleteunddomains delete-addressbitten 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.- Mit einer Browser-Anmeldung fragen diese beiden Löschbefehle auch nach einem Bestätigungscode, wie die Web-App. Unbeaufsichtigt kann ihn niemand eingeben, daher bricht der Befehl mit Exit-Code
4ab. Führen Sie zuerstopenemail verifyaus, dann brauchen die nächsten 60 Minuten keinen Code. 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, 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--jsongebendomains listundlist-addressesein einziges{ items, hasMore, nextCursor }-Dokument aus. - Ein Schlüssel oder eine Anmeldung, die auf bestimmte Domains oder Adressen beschränkt ist, sieht trotzdem jede Domain und Adresse. Er kann keine Domain hinzufügen, und jede andere Änderung braucht die ganze Domain unter den Domains, die er umfasst, sonst wird der Aufruf mit 422
capability_unsupportedabgelehnt. - Eine Ablehnung endet mit dem Code ihres Status:
4für ein 403, etwadomain_allowance_reached, wenn der Tarif keine weiteren Domains erlaubt,5für ein 404,6für ein 409, etwadomain_already_addedoderdomain_claimed, und7für ein 422, etwainvalid_tracking_hostoderworkspace_limit_reached. - Die letzte Domain eines Workspace lässt sich nicht aus der CLI entfernen. Das ist ein 409
last_domain, weil das Entfernen das ganze Postfach löscht, was die Web-App zuerst bestätigen lässt. Eine Domain mit reservierten Kontoadressen ist ein 409domain_holds_reserved_addresses. domains createund die beiden Löschbefehle werden nach einem Netzwerkfehler nie wiederholt. Ein 409domain_already_addedoder ein 404 bei Ihrem eigenen zweiten Versuch nach einer verlorenen Antwort bedeutet, dass der erste funktioniert hat.verify,update,create-addressundupdate-addresswerden von selbst wiederholt, da zweimaliges Senden dasselbe Ergebnis hinterlässt.