Registration and OTP
Create one address per run, submit it through the product, and assert that the expected verification message arrives.
Developers & QA
Give each signup, verification-code, magic-link, or password-reset test its own receiving address—then inspect the message through a credential-scoped API.
API credentials are currently operator-issued. Access is not self-service, and message delivery is not guaranteed.
Use the right testing layer
Most mail behavior belongs in fast unit tests with a fake transport. Use a temporary inbox for the smaller set of integration and end-to-end checks where actual inbound delivery matters.
Create one address per run, submit it through the product, and assert that the expected verification message arrives.
Check the recipient, sender, subject, expiry language, and reset URL without sharing a long-lived team mailbox.
Keep messages attributable by provisioning a separate credential-owned inbox for each scenario or worker.
Reliable test pattern
A fixed sleep is either too short on a slow day or longer than necessary on a fast one. Poll modestly, stop at a clear deadline, and report what failed.
Read the developer testing guideProvision an inbox with an operator-issued credential that has the inbox:create ability.
Run the same signup, OTP, or reset action that a user would perform.
List messages with inbox:read until the expected stable subject appears or the deadline expires. Back off between requests and honor Retry-After.
Retrieve the selected message and assert its recipient, sender, important copy, code, or URL. Treat every body and attachment as untrusted input.
Let the inbox and messages age out after the test. The standard deployment default is about 60 minutes.
What it can verify
What it cannot promise
Start with the endpoint reference and Playwright example. If the boundary fits your test suite, request an operator-issued credential through the contact page.
Optional analytics help us improve 9Mail.xyz. They stay off until you accept. Privacy details