# Migrate from MailSlurp

> Moving from MailSlurp to Facteur: an invoice known in advance, no inbox left to create in your tests, and a switch that fits in a few lines per file.
> https://facteur.eu/en/alternatives/mailslurp

Migrate from MailSlurp

## Migrate from MailSlurp

Volume included in the subscription rather than an invoice you discover at the end of the month, per-inbox quotas, and data that stays in France. Here is what switching changes in your tests, line by line.

- The invoice is known in advance, packs valid for a year
- Quotas and alerts per inbox
- Data in France, billed in euros, DPA online

## What makes a team move

- **The invoice stops being a surprise** : Their subscription pays for features; messages are billed on top. While the volume is low it is the fairer model; the day the suite runs on every commit, nobody knows what the month will cost.
- **One inbox can no longer drain the budget** : A ceiling per inbox and an alert threshold: a runaway test stops on its own quota instead of eating the whole organisation’s capacity.
- **Nothing to create before sending** : Every inbox owns its subdomain, and any address ending in it is accepted from the first message. No inbox to create at the start of a test, none to delete at the end.
- **The message arrives in pieces** : Body, headers, links and one-time code are extracted on reception. What your tests wrote as regular expressions is already done.

## Translating your tests

Both APIs wait for the message rather than leaving your suite to wait for it: that is what MailSlurp got right, and we did not try to do it differently. What changes comes down to two things: there is no inbox to create, and no code left to extract.

## The migration, step by step

The API correspondence is one line per call, and the migration goes file by file, both services running side by side until the suite is green.

- **Create an account and an inbox** : The address already exists: every inbox owns its subdomain and accepts any address ending in it. The createInbox() at the top of each test goes, and the cleanup at the end goes with it.
- **Replace the client** : The wait keeps its shape: waitForLatestEmail(inboxId, timeout) becomes messages.waitFor({ inbox, sentTo, wait }): the same blocking call, the same timeouts, one more parameter to target the address.
- **Remove the extraction** : The one-time code arrives in message.otp, with the body, headers and links already parsed: the regular expression that dug through the body has nothing left to do.
- **Run the suite, then cancel** : Nothing is transferred: test messages regenerate on the next run. Keep both accounts until everything is green.

The switch, at a glance

- Billing model
- Volume included, then stacking packs
- Subscription + usage as you go

- Predictable invoice
- Known in advance
- Varies with the month’s usage

- Volume included in the subscription
- Yes, by plan
- No, billed separately

- Per-inbox quotas
- Yes, with overage alerts
- Not documented

- SAML SSO
- Included from the Team plan
- On higher tiers

- Hosting
- France, billed in euros
- Outside France, billed in dollars

- DPA
- Downloadable online
- On request

Where this page’s claims come from

Frequently asked
