Facteur and Mailosaur
Mailosaur receives test emails in servers. Its Core plan shows SMS separately. Here is what it publishes, then what Facteur does.
What Mailosaur publishes
Each line is something Mailosaur publishes. It carries the address of the page where we read it and the date we read it. What we could not check is not here. These pages change: read the source again before you decide.
-
01
The pricing page shows three plans: Personal from $20 per month and Core from $50 per month, billed annually, and Enterprise on quote.
-
02
The Personal plan shows 15,000 inbound emails per month, based on a daily limit of 500. The Core plan shows 75,000 inbound emails per month, based on a daily limit of 2,500.
-
03
The Personal plan includes one inbox, with unlimited email addresses. The Core plan includes multiple inboxes.
-
04
On the Core plan, the page shows "SMS and authentication" from $37.50 per month, and email previews from $25 per month.
-
05
The Node client installs with npm install mailosaur and is built with new MailosaurClient(key). Its messages.get(serverId, { sentTo }) method waits for the first matching email, 10 seconds by default, a delay the timeout option extends.
-
06
The codes found in a message are in the html.codes and text.codes arrays, each with a value property.
-
07
The API reference documents GET /api/servers, POST /api/messages/search, GET /api/messages/:id, GET /api/files/attachments/:id, GET /api/files/email/:id (the .eml file), GET /api/analysis/deliverability/:id, POST /api/devices/otp and GET /api/usage/limits.
The same test, with one then the other
Both clients wait for the message. What changes: the inbox id replaces the serverId, and the code is read from the otp field instead of html.codes.
// The Mailosaur client, and the code looked up in the body.
const MailosaurClient = require('mailosaur');
const mailosaur = new MailosaurClient(process.env.MAILOSAUR_API_KEY);
// Waits for the first matching message, 10 seconds by default.
const message = await mailosaur.messages.get(serverId, {
sentTo: address,
});
const code = message.html.codes[0].value;
// No Facteur package to install: one HTTP call that waits.
const search = new URLSearchParams({
inbox: 'j3k9x2mq',
sentTo: address,
wait: '30000',
});
const response = await fetch('https://api.facteur.eu/v1/messages?' + search, {
headers: { authorization: 'Bearer ' + process.env.FACTEUR_API_KEY },
});
const { messages } = await response.json();
// The code is already extracted, in a field of its own.
const code = messages[0].otp;
Four steps, both services side by side
-
Step 01
Create an account and an inbox
The inbox id, eight characters, plays the part of the serverId. Any address of the inbox's domain lands in it.
-
Step 02
Point your sends at the inbox
Your scenarios write to an address of the Facteur inbox's domain, with one tag per test after the "+".
-
Step 03
Replace messages.get
Facteur's search takes inbox, sentTo and wait, and waits for the message. The code is read from otp instead of html.codes[0].value.
-
Step 04
Run the suite, then cancel
Keep both accounts until the suite is green: there is no data to export and no DNS to switch.
What changes, row by row
Each cell about Mailosaur links to the sentence of the sources it comes from. A row that no source lets us write is not in the table.
| Topic | Facteur | Mailosaur |
|---|---|---|
| Waiting for a message | The search waits up to the delay you set, five minutes at most. | messages.get waits 10 seconds by default, longer with the timeout option. source |
| Reading the code | otp holds the most likely code, codes all the ones found. | html.codes and text.codes, each with its value property. source |
| Volume | The included volume counts over the billing period; only the overage is bounded per day. | The Personal and Core plans state their volume based on a daily limit. source |
| SMS | SMS inboxes exist, but the connection to the carrier is not in service: no real SMS arrives today. | "SMS and authentication" shown separately on the Core plan. source |
| .eml source, deliverability, TOTP | None of these three routes in the public API. | One route for each. source |
What Facteur does
These lines describe Facteur as its product pages and help centre give it.
One address per test
Everything before the at sign is free. Two tests writing to inscription+run-42 and inscription+run-43 each get their own message, in the same inbox.
Wait for the message in one request
The search accepts a wait of five minutes at most. If nothing arrives, it answers an empty list, not an error.
The code, already extracted
The otp field holds the most likely one-time code. When nothing announces it, Facteur leaves it empty rather than guess.
Reading costs nothing
Only a received, kept message counts against your plan. A test that receives 3 emails and reads them 40 times uses 3.
Deleted when its time is up
Each message is deleted when your plan's duration has passed, with its raw file and attachments.
Hosted at OVHcloud
The application and its database are hosted at OVHcloud, and billing is in euros. The data centre is in France.
SMS are not received yet
The connection to the carrier that delivers SMS is not in service. An assigned number receives no real SMS today.
Frequently asked questions
When to look at Mailosaur?
Mailosaur publishes routes for a message's .eml source, deliverability analysis and TOTP codes, and email previews on its Core plan. Facteur has none of these features. If your suite depends on them, look at Mailosaur.
How much work is the migration from Mailosaur?
The client and the call that waits for the message change, and the assertion on the code gets shorter. The Migrate from Mailosaur page gives the mapping of each API call.
What happens to the messages already received at Mailosaur?
They stay at Mailosaur. They are test messages: they come back on the next run of your suite.
Where are Facteur's prices?
On the Pricing page, which reads Facteur's grid. No Facteur price is written here.
The other tools
The same approach for each tool: what it publishes, sourced and dated, then what Facteur does.
Facteur and Mailisk
What Mailisk publishes about its namespaces, its SMS and its free plan, and what Facteur does.
Facteur and Mailtrap
What Mailtrap publishes about its email sandbox, HTML previews and plans, and what Facteur does.
Facteur and MailSlurp
What MailSlurp publishes about its plans, inboxes and phone numbers, and what Facteur does.
Facteur and Mailpit
What Mailpit publishes about its open source software, SMTP server and API, and what Facteur does.
Migrate from Mailosaur
The mapping of the API calls, one by one, and the ones that have no equivalent at Facteur.
Try Facteur without an account
The trial receives a test email, with no sign-up. Prices are on the Pricing page.