Ihre eigene Domain

Unbegrenzt Testkonten auf einer Catch-all-Domain

Eine Testsuite, die für jeden Lauf einen neuen Nutzer braucht, braucht für jeden Lauf eine neue E-Mail-Adresse, und ein Mail-Provider, der Postfächer einzeln vergibt, hat dafür die falsche Form. Ein MX-Eintrag macht aus einer Domain, die Ihnen gehört, ein Catch-all-Postfach: Jede Adresse darauf funktioniert, keine davon muss angelegt werden, und ein QA-Team kann tausend davon am Tag verbrauchen, ohne dass irgendjemand irgendetwas bereitstellen muss.

  • Fortgeschritten
  • 11 Min. Lesezeit
Dutzende kleine blaue Umschläge, die in einen breiten grauen Trichter fallen, der einen grauen Briefkasten speist

Warum ein Mail-Provider die falsche Form für QA ist

Jede Art, einer Testsuite E-Mail-Adressen zu geben, wurde schon versucht, und jede leckt an einer anderen Stelle:

AnsatzWas er kostetWo er bricht
Ein geteiltes Postfach (qa@company.com)Nichts einzurichten.Jeder Test liest die Mail jedes anderen Tests. Der erste Poll eines neuen Laufs findet den Code des letzten Laufs. Parallele Läufe sind unmöglich.
Plus-Adressierung (qa+run42@company.com)Nichts einzurichten, wenn der Provider es unterstützt.Es ist immer noch ein Postfach: ein Kontingent, ein IMAP-Login, geteilt vom ganzen Team, und ein Anmeldeformular, das das Tag entfernt oder das + ablehnt.
Ein Postfach pro Tester vom ProviderJe einen Platz, und ein Ticket, um ihn anzulegen.Niemand stellt ein Postfach pro Testlauf bereit. Tester verwenden ihres wieder, und das Problem des geteilten Postfachs kehrt zurück, eine Person nach der anderen.
Eine Catch-all-Domain, hierher ausgerichtetEin DNS-Eintrag, einmal.Das Postfach ist öffentlich für jeden, der die Adresse kennt, und Mail bleibt 5 Tage. Beides ist unproblematisch für einen Code, der elf Sekunden lang zählt; keins von beidem ist unproblematisch für echte Kunden-Mail.

Die vierte Zeile ist diese Anleitung. Es ist derselbe Mechanismus, auf dem die öffentlichen Wegwerf-Domains laufen — ein Server, der jede Adresse auf einer Domain akzeptiert statt einer Liste von Postfächern —, angewendet auf einen Namen, den außer Ihnen niemand verwendet.

Der eine DNS-Eintrag

Fügen Sie bei Ihrem DNS-Provider einen einzelnen MX-Eintrag am Apex einer Domain hinzu, die Ihnen gehört. Kein weiterer Eintrag hier, kein TXT zum Nachweis von irgendetwas, kein Konto auf dieser Website:

MX-Eintrag für die Domain10 smtp.grabmail.io

  1. Veröffentlichen Sie den MX. Priorität 10, zeigend auf smtp.grabmail.io. Löschen Sie jeden anderen MX auf der Domain — Mail kann nur an einen Ort zugestellt werden, und ein übrig gebliebener Eintrag schickt einen Teil davon woandershin.
  2. Warten Sie auf DNS. Meist Minuten; gelegentlich die TTL des Eintrags, der vorher da war. dig MX qa-example.com zeigt, wann es übernommen wurde.
  3. Schicken Sie eine Nachricht an eine beliebige Adresse darauf. Die erste Zustellung ist es, was die Domain verbindet: Der Server schlägt in diesem Moment den MX nach, sieht sich selbst, und nimmt an. Von da an ist jede Adresse auf der Domain ein Postfach.
A sendermail for your domainYour DNSMX 10 smtp.grabmail.ioGrabMailchecks the MX itselfThe only thing you publishand keeps the messageNo account, no token, no verification page. The record is the proof.
Ein einziger MX-Eintrag ist die gesamte Einrichtung. Der sendende Server fragt DNS, wohin Mail für die Domain geht, und die Antwort ist ein Server, der jede Adresse darauf annimmt.

Ein Namensschema, das sagt, wer das Postfach angelegt hat

Da jede Adresse gültig ist, kann der lokale Teil frei Informationen tragen — und um zwei Uhr morgens, mit einem fehlgeschlagenen Lauf und einem offenen Postfach, werden Sie das auch wollen. Drei Teile, durch Bindestriche verbunden, in dieser Reihenfolge:

TeilBeispielWas es Ihnen bringt
Was es angelegt hatsignup, reset, e2e, aliceEin Blick sagt, zu welchem Ablauf oder welcher Person das Postfach gehört.
Welcher Lauf1234567890 (die CI-Lauf-ID), ein Branch-Name, ein DatumJedes Postfach aus einem Pipeline-Lauf teilt sich ein Token, nach dem Sie suchen können.
Zufall3f9a1c2eAcht Zeichen davon. Das ist der Teil, der dafür sorgt, dass zwei Tests, zwei Shards oder zwei Wiederholungen sich nie ein Postfach teilen.
Nie: irgendetwas Echtesein Kundenname, eine echte Nutzer-ID, eine Ticketnummer, die einen Kunden benenntDas Postfach ist öffentlich für jeden, der die Adresse kennt. Nichts in der Adresse sollte es wert sein, gewusst zu werden.
tests/address.ts
// one helper, every runner: who made it, which run, and eight random characters
export const testAddress = (who: string, run = process.env.GITHUB_RUN_ID ?? 'local') =>
  `${who}-${run}-${crypto.randomUUID().slice(0, 8)}@qa-example.com`;

testAddress('signup');        // signup-1234567890-3f9a1c2e@qa-example.com

Jede Adresse lesen, dieselben drei Aufrufe

An der API ändert sich für die eigene Domain nichts. Derselbe Listing-Aufruf, derselbe Nachrichten-Aufruf, dasselbe Löschen — kein Schlüssel in der öffentlichen Stufe, und die Domain in der Adresse ist das Einzige, was sich unterscheidet:

ein Postfach auf der eigenen Domain auflisten
$ curl -sG https://grabmail.io/api/v1/mailbox --data-urlencode "address=signup-1234567890-3f9a1c2e@qa-example.com"

Das heißt, jeder Helfer auf dieser Website funktioniert unverändert, nachdem eine Konstante bearbeitet wurde: die Playwright-Fixture, der Cypress-Task, die Python- und Node-Module. Drei Dinge sind es wert, gewusst zu werden, über die die öffentlichen Domains einen nicht nachdenken lassen:

Ein 404 bedeutet, dass der MX noch nicht da ist
Die Auflistung antwortet mit 404 für eine Domain, die hier nicht gehostet wird. Bei der eigenen Domain ist das ein DNS-Problem — der Eintrag hat sich noch nicht verbreitet, oder zeigt woandershin — kein API-Problem. Zuerst dig MX.
Der Alias funktioniert auch auf Ihrer Domain
Jedes Postfach, auf jeder Domain, hat eine zweite Adresse auf einer separaten Domain, die dorthin zustellt und es nicht lesen kann. Geben Sie diese einer Website, wenn sie das Postfach lieber nicht öffnen können soll; pollen Sie Ihre eigene Adresse.
Eine ausgelastete Adresse wird paginiert
Eine Catch-all-Adresse, die Bounces oder einen Tag voller Benachrichtigungen sammelt, kann mehr als eine Seite von 200 enthalten. Übergeben Sie next als before zurück, bis es null ist.

Eine Testdomain nutzbar halten

Eine eigene Domain steht auf keiner Sperrliste für Wegwerf-Mail, und das ist oft überhaupt der Grund, eine zu verwenden: Die getestete Anwendung lehnt grabmail.io und jede andere öffentliche Domain ab, genau wie sie es soll. Vier Gewohnheiten halten das so:

  • Verwenden Sie eine dedizierte Domainqa-example.com, keine Subdomain der Produktion und nicht die Domain, an die Kunden schreiben. Der Dienst akzeptiert nur registrierbare Domains (example.com, nie mail.example.com), und eine Testdomain sollte keine andere Aufgabe haben.
  • Veröffentlichen Sie sie nicht. Die Listen entstehen aus dem, was auf öffentlichen Temp-Mail-Websites und in geteilten Adress-Dumps auftaucht. Eine Domain, die nur je in Ihrer eigenen Testsuite auftaucht, hat keinen Weg auf sie.
  • Sichern Sie sie mit SPF und DMARC. Eine Domain, die nur empfängt, ohne SPF, ist eine Domain, von der aus jeder Mail fälschen kann; zwei Einträge schließen das, und kosten nichts.
  • Richten Sie keine echte Mail darauf aus. In dem Moment, in dem ein Staging-System Kundenbenachrichtigungen an eine Catch-all-Adresse schickt, hält ein öffentliches Postfach Kundendaten. Testdomains tragen Testmail.

Wenn die Anwendung jede Catch-all-Domain ablehnt — manche Betrugsprüfungen tun das, indem sie testen, ob eine zufällige Adresse auf der Domain akzeptiert wird —, gibt es einen kostenpflichtigen Pool aus gewöhnlich aussehenden .com-Domains, die von den Listen ferngehalten werden, beschrieben auf der Preisseite. Warum Anmeldeformulare Wegwerf-E-Mail blockieren erklärt, was jede Art von Prüfung sieht.

Für ein Team: eine Domain, viele Tester, viele Pipelines

Eine Catch-all-Domain bedient alle, weil der lokale Teil das Einzige ist, das sich unterscheiden muss, und der ist kostenlos. Was ein Team braucht, ist Einigkeit über das Namensschema oben und drei kleine Konventionen:

Ein Präfix pro Pipeline und pro Person
e2e-, nightly-, alice-. Ein Job-Log nach dem Präfix zu durchsuchen findet jedes Postfach, das er angelegt hat; nach dem eines Kollegen zu suchen findet den Bug, den er sich gerade ansieht.
Nichts wird je geteilt
Es gibt kein „Team-Postfach“ auf der Domain und keine Fixture, die eine feste Adresse ausgibt. Wenn zwei Personen dasselbe Postfach brauchen, schickt eine von ihnen der anderen die Adresse.
Die Ratenlimits gelten pro Client
Ein Lesevorgang pro Sekunde und Adresse, 1200 Anfragen pro Minute und Client — ein CI-Runner ist ein Client, ein Laptop ein anderer. Ein Team von zehn, das gleichzeitig Suiten laufen lässt, sind zehn Clients, nicht einer.

Die geltenden Grenzen

Die eigene Domain bekommt denselben Dienst wie die öffentlichen, mit denselben Obergrenzen. Keine davon ist einstellbar, und keine ist ein Problem für eine Testsuite:

GrenzeWertWas das für QA bedeutet
Aufbewahrung5 Tage pro NachrichtJeder Lauf erzeugt seine eigene Mail; nichts wird je aus einer vorherigen Woche abgerufen. Die genauen Regeln.
Anhänge5 MB pro NachrichtGenug für ein Rechnungs-PDF oder einen CSV-Export; eine größere Nachricht wird bei SMTP abgelehnt, der Absender wird also informiert.
Lesevorgänge1 pro Sekunde und Adresse, 1200 pro Minute und ClientZwanzig Postfächer, einmal pro Sekunde gepollt, von einem Runner aus. Darüber hinaus 429 mit Retry-After.
PrivatsphäreKeine — wer eine Adresse kennt, kann sie lesenZufällige lokale Teile, eine unveröffentlichte Domain, und keine echte Kunden-Mail.
VersandKeinerDie Domain empfängt nur. Ihre Anwendung versendet über ihren eigenen Provider, wie in der Produktion.

Bevor Sie es für fertig erklären

  • Eine dedizierte, registrierbare Domain, mit einem MX-Eintrag: 10 smtp.grabmail.io, und keinem weiteren MX.
  • Eine Nachricht an eine beliebige Adresse darauf geschickt und über die API zurückgelesen.
  • SPF und DMARC veröffentlicht, sodass niemand als die Domain versenden kann.
  • Ein Namens-Helfer — wer, welcher Lauf, acht zufällige Zeichen — von jeder Suite verwendet.
  • Die Domain in der Umgebungskonfiguration gehalten, nie im Code, in Screenshots oder Tickets.
  • Nichts, was echte Kunden-Mail verschickt, darauf ausgerichtet.

Von hier aus sind die Suiten die bereits geschriebenen: Playwright mit der Domain in seiner Fixture, die runner-unabhängige Disziplin, und der GitHub-Actions-Workflow mit der Domain in einer Variable.

Fragen

Kann ich eine Subdomain verwenden, wie test.company.com?

Nein — der Dienst akzeptiert nur registrierbare Domains (company.com, oder company.co.uk), weil, wer eine Domain kontrolliert, jeden Namen darunter kontrolliert, und zwei Parteien dürfen nicht überlappende Hälften eines Namensraums halten können. Registrieren Sie eine günstige dedizierte Domain zum Testen; das ist ohnehin die bessere Praxis.

Wie lange dauert es, bis der MX-Eintrag funktioniert?

Sobald DNS ihn ausliefert, meist Minuten. Gab es einen vorherigen MX, gilt dessen TTL. Die Domain wird durch die erste Nachricht verbunden, die danach ankommt — sonst muss nichts weiter passieren, und dig MX sagt Ihnen, wann der Eintrag live ist.

Kostet das etwas?

Nein. Eine Domain zu verbinden, jede Adresse darauf und die API sind kostenlos, ohne Konto. Das einzige Kostenpflichtige auf dieser Website ist ein Pool von Domains, der von den Wegwerf-Mail-Sperrlisten ferngehalten wird, für alle, die keine eigene Domain verwenden können.

Kann jemand anderes Mail auf meiner Domain lesen?

Wer eine Adresse kennt, kann das, genau wie auf den öffentlichen Domains. Was die eigene Domain ändert, ist die Erratbarkeit: Ihre Adressen liegen auf einem Namen, den sonst niemand verwendet. Zufällige lokale Teile und eine unveröffentlichte Domain machen das Erraten unpraktikabel; sie machen das Postfach nicht privat, und nichts hier tut das.

Was passiert mit Mail, die an die Domain geschickt wurde, bevor ich sie verbunden habe?

Hier kommt nichts an, bis der MX hierher zeigt. Mail, die verschickt wurde, während der alte Eintrag aktiv war, ging an den alten Server oder wurde zurückgewiesen; Mail, die nach der DNS-Umstellung verschickt wurde, kommt an und verbindet die Domain.

Wie trenne ich die Domain wieder?

Entfernen Sie den MX-Eintrag. Neue Mail kommt sofort nicht mehr an; was bereits in den Postfächern liegt, läuft von selbst innerhalb von 5 Tagen ab. Danach wird nichts mehr über die Domain gespeichert.

Die Anwendung lehnt auch meine Testdomain ab. Was jetzt?

Manche Betrugsprüfungen lehnen jede Domain ab, die eine zufällige Adresse akzeptiert — eine Catch-all-Probe —, statt eine Liste zu prüfen. Dafür braucht es eine Domain, die sich wie ein gewöhnlicher Postfach-Provider verhält, und genau das liefert der kostenpflichtige Pool; warum Anmeldeformulare Wegwerf-E-Mail blockieren erklärt, welcher Prüfung Sie gegenüberstehen.

Probieren Sie es aus, solange es frisch ist

Eine Adresse braucht einen Klick, kein Konto und keine Karte. Alles in dieser Anleitung funktioniert damit sofort.

Willkommen zurück

Ihre Postfächer und Ihre Domains an einem Ort.