Wegwerf-Posteingänge
Eine funktionierende Adresse für jemanden, der keine hat: kein Konto, kein Key, und noch am selben Tag verschwunden.
Was ein Wegwerf-Posteingang ist
Ein Aufrufer fordert eine Adresse auf einer Domain an, die diese Installation besitzt, beobachtet sie ein paar Minuten, liest, was ankommt, und lässt sie liegen. Sie existiert für den Bestätigungscode, für die Frage „Was verschickt dieses Formular eigentlich?“ und für die Anmeldung, die Sie nicht an der Adresse hängen haben wollen, die Sie in fünf Jahren noch benutzen.
- Sie empfängt und sonst nichts. Es gibt kein Senden: Ein Posteingang hat keine Identität, als die er senden könnte, und keiner dieser neun Aufrufe legt eine Nachricht auf die Leitung.
- Die Laufzeit beträgt standardmäßig 60 Minuten und lässt sich in Ein-Stunden-Schritten auf 24 Stunden ausdehnen.
- Er fasst 50 Nachrichten, gezählt beim Eingang. Mail, die einen vollen Posteingang erreicht, wird verworfen und nicht in die Warteschlange gestellt, und eine zu löschen schafft keinen Platz für eine weitere.
- Am Ende der Laufzeit wird die Mail GELÖSCHT, nicht versteckt und nicht archiviert. Die Zeile überlebt sie um eine Woche, damit die Adresse nicht neu vergeben werden kann, während ein langsamer Absender noch Zustellversuche an sie unternimmt.
- Nichts davon berührt ein Postfach. Eine Wegwerfnachricht liegt in einer eigenen Tabelle, und keine Abfrage auf diesem Pfad erreicht ein echtes Postfach.
Das sind dieselben Aufrufe, die das kostenlose Tool auf dieser Seite macht; alles, was die Seite kann, kann auch Ihr Code. Die API ist für den Fall da, für den die Seite es nicht ist: eine Testsuite, die pro Lauf eine frische Adresse will.
Die Adresse ist nicht das Credential
Eine Wegwerfadresse wird in dem Moment, in dem sie ausgestellt wird, in ein Anmeldeformular getippt. Von dort reist sie in einem To:-Header weiter, durch die Logs des Absenders und in das CRM, das am anderen Ende sitzt. Wenn es genügte, die Adresse zu kennen, um die Mail zu lesen, würde das Tool jeden ausgestellten Posteingang preisgeben, und zwar konstruktionsbedingt und genau an die Partei, die der Aufrufer auf Abstand halten wollte.
Deshalb liefert das Erstellen eines Posteingangs einen zweiten Wert: ein token, 32 zufällige Bytes als oe_inbox_ plus 43 base64url-Zeichen. Es erscheint in dieser einen Antwort und in keiner anderen. Die Zeile speichert nur einen mit Schlüssel gebildeten Hash davon, nichts stellt es also wieder her, weder eine Supportanfrage noch ein Datenbank-Dump. Verlieren Sie das Token, haben Sie den Posteingang verloren, und das ist das richtige Ergebnis für ein Credential, das die Mail von jemandem liest.
# 1. Mint one. This is the only response that carries a token.curl -s -X POST "$OE/temp-mail/inboxes" -H "Content-Type: application/json" -d '{}' # 2. Keep it, and read with it.export INBOX="Authorization: Bearer oe_inbox_kQ8v…"curl -s "$OE/temp-mail/inboxes/tinb_9c2f…/messages" -H "$INBOX"Senden Sie einen API-Key oe_live_ oder oe_test_ an eine dieser Routen, wird er als invalid_credential_type abgelehnt und nicht mit einem schlichten 401. Zwei Arten von Credentials teilen sich hier einen Host und einen Header, und „nicht autorisiert“ würde Sie raten lassen, welches der Ihren falsch war.
Die Laufzeit und ihre Verlängerung
Eine Stunde statt der zehn Minuten, nach denen die Gattung benannt ist. Zehn reichen für einen Bestätigungscode und nicht für die andere Hälfte dessen, wofür diese Adressen benutzt werden: eine Testphase, die Ihnen am nächsten Morgen erneut schreibt, ein Formular, das zweimal ausgefüllt wurde, weil der erste Versuch abgelaufen ist. ttlMinutes beim Erstellen fordert etwas anderes an, von 1 bis 1440; eine Zahl außerhalb davon wird mit einem 422 abgelehnt statt stillschweigend angepasst, denn ein Ablauf, den Sie nicht angefordert haben, ist einer, um den Sie bereits herum geplant haben.
POST /temp-mail/inboxes/{id}/extend addiert eine Stunde auf den Ablauf, nicht auf jetzt; früh zu verlängern verschenkt also nicht die verbleibende Zeit. Es funktioniert 23-mal, und der Tag ab dem Moment der Erstellung des Posteingangs ist die härtere der beiden Obergrenzen: Eine Laufzeit, die bereits bis dorthin reicht, hat nichts mehr zu kaufen, wie wenige Verlängerungen auch verbraucht sind. extensionsLeft in jeder Posteingangs-Antwort zählt beides, damit ein Client den Button ausgrauen kann; bei null antwortet der Aufruf mit 409 extension_limit.
Ein abgelaufener Posteingang authentifiziert in dem Moment nicht mehr, in dem er abläuft: Sein Token antwortet mit 404, ohne auf den Aufräumlauf zu warten. Der Aufräumlauf ist das, was die Mail löscht, und er läuft im stündlichen Cron; DELETE /temp-mail/inboxes/{id} ist dieselbe Löschung auf Abruf.
Die Obergrenzen
All das sind gezählte Zeilen und kein Rate Limiter. In dieser Codebasis gibt es keinen Limiter, auf den man zurückgreifen könnte, und das zu sagen nützt mehr, als eine Verteidigung anzudeuten, die es nicht gibt. Sie sitzen dort, wo der Schaden entstünde: beim Ausstellen und beim Speichern.
| Obergrenze | Wert | Was passiert, wenn sie erreicht ist |
|---|---|---|
| Laufzeit | 60 Minuten, verlängerbar auf 24 Stunden | 409 conflict_error / extension_limit |
| Nachrichten pro Posteingang | 50 | Weitere Mail wird an der Tür verworfen. Es wird kein Bounce geschrieben, nichts wird in die Warteschlange gestellt, und das Löschen einer Nachricht gibt den Platz nicht zurück. |
| Ausgestellte Posteingänge | 6 pro Stunde, 30 pro Tag, pro Aufrufer | 429 rate_limit_error / too_many_inboxes |
| Gespeicherter Body | 2 MB | truncated: true auf der Nachricht; der Rest davon ist weg. |
| Anhangsbytes | je 8 MB | content ist null und die Metadaten bleiben erhalten, was nicht dasselbe ist wie eine leere Datei. |
Die Ausstellungsobergrenze zählt gegen einen mit Schlüssel gebildeten Hash der Client-IP, und ein zerstörter Posteingang zählt weiterhin mit; einen wegzuwerfen ist also kein Weg, einen weiteren zu bekommen. Hinter dem Proxy eines Dritten lässt sich der weitergereichte Header fälschen, was eine bekannte Schwäche der Obergrenze ist und kein Loch im Credential: Nichts hier autorisiert anhand dieses Werts.
Was es hier nicht gibt
Noch nicht verfügbarEs durch Ausprobieren herauszufinden ist schlechter, als es gesagt zu bekommen:
- Kein Senden, in keiner Form. Ein Wegwerf-Posteingang hat keine Connection, als die er senden könnte, und eine hinzuzufügen würde einen anonymen, nicht authentifizierten Endpunkt zu einem offenen Relay machen.
- Kein Umbenennen. Die Adresse zu wechseln heißt, einen zweiten Posteingang zu erstellen: Ein Umbenennen an Ort und Stelle würde den alten local-part im Moment des Klicks freigeben, und eine bereits unterwegs befindliche Bestätigung würde dann demjenigen zugestellt, dem er als Nächstem ausgestellt wird.
- Keine Regeln, Filter, Weiterleitungen, Webhooks oder KI.
spamist ein Flag auf der Nachricht, und nichts hat darauf reagiert. Nichts wurde abgelegt, und nichts hier wird zusammengefasst oder als Embedding gespeichert. - Keine Bounces. Mail an eine Pool-Domain, die weder einen aktiven Wegwerf-Posteingang noch eine vom Betreiber angelegte Adresse nennt, wird stillschweigend verworfen, und zwar mit Absicht: Ein öffentlicher Adressgenerator zieht Wörterbuchangriffe an, und einen Zustellbericht an den vom Angriff behaupteten Rückweg zu schreiben würde die Installation zu einer Backscatter-Quelle machen.
- Keine konfigurierte Domain bedeutet kein Dienst. Ist
TEMP_MAIL_DOMAINSleer, antwortetGET /temp-mail/domainsmit einer leeren Liste, und das Erstellen eines Posteingangs antwortet mit 503temp_mail_unavailable. Der eingehende Versand an eine Pool-Domain wurde auf einer Live-Domain noch nicht durchgängig beobachtet.
Eine Domain konfigurieren, wenn Sie die Installation betreiben
Die Liste ist Konfiguration: Ausgegeben wird, was TEMP_MAIL_DOMAINS nennt. Nichts automatisiert das DNS, vier dieser fünf Schritte sind also ein Mensch bei einem Registrar.
- Registrieren Sie eine Domain dafür. Nehmen Sie eine, die Fremde weitergeben dürfen. Jede Adresse darauf teilt sich deren Reputation; deshalb verteilt die Auswahl neue Posteingänge auch zufällig über den Pool, statt die erste Domain zu füllen.
- Fügen Sie sie in der App unter Einstellungen → Domains hinzu. Das erstellt die Sendeidentität und zeigt die zu veröffentlichenden DNS-Einträge an.
- Veröffentlichen Sie die MX-, SPF-, DKIM- und
_openemail-challenge-TXT-Einträge beim Registrar. Die Verifizierung liest das Live-DNS und wird im Cron erneut geprüft; angeboten wird immer nur eine verifizierte Domain. - Tragen Sie die verifizierte Domain auf dem Server in
TEMP_MAIL_DOMAINSein, durch Kommas getrennt. Solange sie dort nicht steht, ist sie eine gewöhnliche Domain im Workspace. - Lassen Sie catch-all AN. Das ist es, was eine Wegwerfadresse existieren lässt, ohne sie anzulegen, denn Mail an einen beliebigen local part wird angenommen und vor der gewöhnlichen Empfängersuche zurückgelesen, sodass für eine Pool-Domain nie eine Adresszeile geschrieben wird; catch-all angeschaltet zu lassen würde beginnen, Wegwerfmail in ein echtes Postfach abzulegen.
Reservierte local-parts (postmaster, abuse, security und der Rest von RFC 2142) können nie Wegwerfadressen sein und fallen stattdessen auf das gewöhnliche Postfach durch. Eine Pool-Domain, die ihre eigenen Missbrauchsmeldungen verschluckt, ist eine Domain, die irgendwann nirgendwohin mehr zustellen kann. Eine Adresse, die Sie selbst auf einer Pool-Domain anlegen, etwa legal@ oder privacy@, verhält sich genauso: Mail an sie landet in Ihrem Postfach, und niemand kann sie als Wegwerfadresse ausgestellt bekommen.