The inbox count stops being a tier
With them, the plan decides how many sandboxes you open. A team that wants one inbox per branch finds out quickly: the volume holds, and it is the inbox counter that triggers the upgrade.
Migration
Email and SMS testing hosted in France, where the number of inboxes does not depend on the subscription tier and SSO is not reserved for the top of the range. Here is what switching changes in your tests, line by line.
Moving from Mailtrap to Facteur happens in your tests, not in a contract: the client changes, the manual waiting goes, and the one-time code arrives already extracted. Nothing is transferred, and both services run side by side for as long as the switch takes.
What you gain is the model: unlimited inboxes and SAML SSO from the Team plan, volume bought separately, and data that stays in France.
With them, the plan decides how many sandboxes you open. A team that wants one inbox per branch finds out quickly: the volume holds, and it is the inbox counter that triggers the upgrade.
SAML is included from our Team plan. It is often IT’s only line item, and it should not decide the rest of the bill.
One call blocks until the message lands, then hands back the body, the links and the code already extracted. The polling loops and the sleeps leave your suites.
A runaway test eats the whole organisation’s capacity with nobody seeing it before the invoice. A per-inbox ceiling and an alert threshold settle it at the source.
The Mailtrap client lists an inbox’s messages, then asks for the body; waiting for the right one to have arrived, and finding the code in it, is left to you. Here it is one call that waits and hands the message back in pieces.
testing.messages.get() + waiting → messages.waitFor()
const client = new MailtrapClient({
token: TOKEN, accountId: ACCOUNT_ID, testInboxId: INBOX_ID,
});
// The message has to have arrived first.
await new Promise((r) => setTimeout(r, 5_000));
const messages = await client.testing.messages.get(INBOX_ID);
const text = await client.testing.messages.getTextMessage(
INBOX_ID, messages[0].id,
);
const code = text.match(/\b\d{6}\b/)?.[0];import { Facteur } from '@facteur-eu/sdk';
const facteur = new Facteur({ apiKey: process.env.FACTEUR_API_KEY });
// Blocks until it arrives. No sleep, no retry.
const message = await facteur.messages.waitFor({
inbox: INBOX_ID,
sentTo: address,
wait: 30_000,
});
const code = message.otp;The Mailtrap code above follows their own published example; the sources are at the foot of this page. Ours runs as written.
Nothing is transferred: test messages regenerate on your suite’s next run. Both services can run side by side until everything is green.
Every inbox gets its own subdomain, and any address ending in it is accepted from the first message. There is nothing else to provision.
Where Mailtrap captures your application’s SMTP traffic, your scenarios now write to a public address of the inbox: the message travels the real sending path, the one a user would see.
Listing the messages, and the sleep before it, become a single messages.waitFor() that blocks until arrival and hands back the body, the links and the code already extracted.
Keep both accounts until the suite is green: there is no data to export and no DNS to switch, so nothing forces the pace.
| Facteur | Mailtrap | |
|---|---|---|
| Inboxes | Unlimited from the Team plan | Sandbox count set by the plan |
| SAML SSO | Included from the Team plan | Reserved for higher plans |
| Message volume | Bought separately, in stacking packs | Set by the subscription tier |
| Per-inbox quotas | Yes, with overage alerts | Not documented |
| Transactional sending | No, we only receive | Yes, a dedicated product |
| Hosting | France, billed in euros | Outside France, billed in dollars |
| DPA | Downloadable online | On request |
Mechanical work: replace the client, write to the inbox’s addresses instead of the SMTP capture, remove the sleeps. There is no data to transfer and no DNS to switch, and both services run side by side until the suite is green: the migration goes file by file, without a stop.
Absolutely as soon as you need more than a single test box. Mailtrap caps sandbox counts and restricts SAML SSO to high-tier plans. At Facteur, inboxes are unlimited from the Team plan (€39/month), SSO is included natively, and volume is purchased flexibly based on actual usage.
They stay there. They are test data: they regenerate on your suite’s next run, and that is exactly what makes this migration light: there is nothing to export.
Mailtrap blends sandbox testing with production sending infrastructure. Facteur is 100% focused on the test experience: real public addresses, instant blocking waits, OTP extraction and unified SMS testing in a French hosted environment, with zero risk to your production domain.
In France, at OVHcloud, and billing is in euros. The sub-processor register and the DPA are published on the site, without having to ask for them.
Other comparisons: Mailisk · MailSlurp · Mailpit · Mailosaur
The free plan asks for no card. If you are switching tools, the steps fit on one page and can be tried on a single test.