Skip to main content

Email fixtures for your test suite — programmatic inboxes, long-polling, first-class OTP and link extraction.

Project description

mailfixture

Email fixtures for your test suite. Create a programmatic inbox in one call, point your app's signup / OTP / password-reset flow at it, then wait for the email — parsed, with the OTP and links already extracted.

Receive-only, built for CI: long-polling instead of retry loops, zero dependencies outside the Python standard library, Python 3.9+.

pip install mailfixture

Quickstart

Create a key in Dashboard → API keys and export it as MAILFIXTURE_API_KEY.

from mailfixture import MailFixture

mfx = MailFixture()  # reads MAILFIXTURE_API_KEY

def test_signup_sends_otp(page):
    inbox = mfx.create_inbox(ttl_seconds=900)

    page.goto("/signup")
    page.fill("#email", inbox.email_address)
    page.click("text=Send code")

    otp = inbox.wait_for_otp(timeout=30)   # long-polls; no sleep()
    page.fill("#otp", otp)

Waiting for a magic link instead:

link = inbox.wait_for_link(kind="verify", timeout=30)
page.goto(link.url)

Everything on the wait helpers is server-side long-polling: the request is held open until a matching message arrives (or the timeout passes, raising mailfixture.MailFixtureTimeout).

API surface

Method Purpose
create_inbox(local_part=, domain=, ttl_seconds=) new inbox; returns an Inbox handle
inbox.wait_for_message(match=, timeout=) first matching message, full body + extraction
inbox.wait_for_otp(match=, timeout=) best extracted OTP as a string
inbox.wait_for_link(kind=, match=, timeout=) first link, optionally verify|reset|unsubscribe
inbox.messages(since=, match=, wait=) / clear() / delete() raw listing & lifecycle
get_message(id), get_otp(id), get_links(id) direct message access
download_attachment(message_id, index) decoded attachment bytes
create_domain(fqdn), verify_domain(id), list_domains(), delete_domain(id) custom domains
create_key(label=), list_keys(), revoke_key(id) API keys

match filters with subject:, from:, or to: prefixes; a bare term matches the subject.

Errors are raised as mailfixture.MailFixtureError carrying the API's RFC 7807 status / title / detail fields.

Development

PYTHONPATH=src python3 -m unittest discover -s tests

Docs: https://mailfixture.com/docs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mailfixture-0.2.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mailfixture-0.2.0-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file mailfixture-0.2.0.tar.gz.

File metadata

  • Download URL: mailfixture-0.2.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mailfixture-0.2.0.tar.gz
Algorithm Hash digest
SHA256 438cec06935621dbd108ad147a07c8e0fe1b0b6201f44ffa1b7b91cc330e5840
MD5 e4660b9d366055872ec2a148ace37f18
BLAKE2b-256 8e8387d0e93c8707b88b229f7f61b8e6da38dbd49678a59f6846b2b116eff054

See more details on using hashes here.

File details

Details for the file mailfixture-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mailfixture-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mailfixture-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f3b448dc2f78f1806e7c3bbb47691f9e30f06da2c2226ff0bc0c9bffbd256552
MD5 5c61420bcbdddc59f7ead07542f0476e
BLAKE2b-256 3af37252e31e3d48536798524d57526f756f87f4395895315e9677bfaeb91b60

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page