Skip to content

CI Email Testing

No polling. Your test can async await email receipt.

python
receiver = client.create_receiver(channel="email", label="signup-test")
# ... trigger your signup flow ...
message = client.wait_for_message(receiver.id, timeout=30)
assert message.extracted.otps[0] == "483291"  # received in 340ms

OTP received in 340ms. Test passed.

No more flaky email tests

Async await instead of polling loops. No timing hacks, no rate limit errors from your email provider.

See the API docs

Email + webhooks + 2FA in one API

Create email receivers, webhook endpoints, and 2FA code generators from the same client. One dependency instead of three.

Get started

vs polling-based CI email tools

Most CI email tools require your test to poll for new messages, adding latency and fragility to every test run.

Async await means your test resumes the instant the email lands.