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.1.0.tar.gz (12.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.1.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mailfixture-0.1.0.tar.gz
  • Upload date:
  • Size: 12.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.1.0.tar.gz
Algorithm Hash digest
SHA256 a9ebf127ffb7e9c44ad7db7a4347a99d99f3dd2ac39659cfba7ddf166808dad7
MD5 57d7f157e0422f8b942d235f6c170890
BLAKE2b-256 2e393ad34195f0918c7426d86ef6c3a34b54f2216f22c7a567922bb55d464207

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mailfixture-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 00a01394a15d34d8f0b938c5d77c792fc8ad2196678fcd322bc249f8b1bc0978
MD5 270a2fee2a8c24484289f26f5a3b9077
BLAKE2b-256 d263b18fb3442535251136ef8e9497975aa79bb46f9c09bfcadad82c8462175d

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