Compare
The Scaleway alternative with the rest included
Send over REST or SMTP on a platform that already carries the webhooks, the templates and the scheduling. There is no second product to stand up.
What arrives assembled
Scaleway sells the send. Everything around it is a second product, or a gap.
| Comes with | mailkube | Scaleway | Docs |
|---|---|---|---|
| Webhooks | Yes | Topics and Events | Docs(opens in a new tab) |
| Webhook signing | HMAC | Topics and Events | |
| Stored templates, versioned | Yes | Docs(opens in a new tab) | |
| Scheduled sending | 30 days | Docs(opens in a new tab) | |
| Idempotency keys | Yes | Docs(opens in a new tab) | |
| Framework packages | Django, Laravel, Rails, Spring Boot | Docs(opens in a new tab) |
Four of those rows say No. Scaleway’s public documentation describes none of them. Webhooks are the sharpest row. Theirs are not an endpoint you register. You create a Topics and Events topic, copy its identifier, subscribe your URL, confirm the subscription, then create the webhook against that topic. The feature is in beta, its quota comes from the Scaleway betas page, and the bill runs through Topics and Events.
Scaleway also holds a new account to 10,000 emails a month. Support raises that case by case, once your identity and your payment method are validated.
Feature by feature
The rows below hold what each platform documents today. A docs link opens the mailkube page behind that row.
| Feature | mailkube | Scaleway | Docs |
|---|---|---|---|
| Where account data is stored | European Union | European Union | |
| Free plan | 4,000 a month, 140 a day | 300 a month | |
| Dedicated IPs | Included from Elite | Included from Scale | Docs(opens in a new tab) |
| IP warm-up | Yes | Included from Scale | Docs(opens in a new tab) |
| Tags per message | 20 | Docs(opens in a new tab) | |
| Per-topic opt-out on a send | Yes | Docs(opens in a new tab) | |
| Outbound body and link scan | Yes | ||
| REST API | Yes | Yes | Docs(opens in a new tab) |
| SMTP relay | Yes | Yes | Docs(opens in a new tab) |
| Official SDKs | Node, Python, Go, Java, PHP, Ruby | Go, Python, JavaScript | Docs(opens in a new tab) |
| CLI | Yes | Yes | Docs(opens in a new tab) |
Dedicated IPs are included from the Elite plan. Elite carries one at 100,000 emails a month, and Volume carries six at 750,000. Each new one warms on a six-stage ladder, from 50 messages a day to 10,000. Scaleway includes a managed IP on its Scale plan and warms it over three to six weeks. One Scaleway Project cannot hold both dedicated and shared IPs, so a dedicated IP means a second Project.
Where your data lives
Customer data is stored in the European Union. Our infrastructure runs in European data centres, in the French OVHcloud group.
Scaleway is a French company, and it runs Transactional Email in a single region. On this comparison the two platforms stand in the same place, and the rest of this page is where they part.
The detail is in the data processing agreement.
Two transports, headers included
POST to the REST API, or point the SMTP client you already run at smtp.mailkube.com. Everything the API takes as a JSON field, SMTP takes as a header. Those headers are stripped before the message reaches the recipient.
X-Mailkube-Tagscarries the same tag list as the RESTtagsfieldX-Mailkube-Topicattributes the send to a topic, so recipients who opted out are filteredX-Mailkube-Template-IdandX-Mailkube-Template-Versionrender a saved template server-side
An SMTP send is the same message as an API send. It lands in the same logs, counts against the same quota and fires the same webhook events. The SMTP reference(opens in a new tab) lists every header, reply code and rate limit.
Scaleway relays SMTP on smtp.tem.scaleway.com, with your Project identifier as the username. Its send API carries an additional_headers list, which is where a Reply-To goes. No header there renders a stored template or attributes a send to a topic.
One more difference sits on the send itself. Every mailkube send takes an idempotency key(opens in a new tab) , and a retried call returns the first result instead of sending twice. The Scaleway API documents no such key, and a retried call sends a second message.
Your stack, already covered
Official SDKs cover Node, Python, Go, Java, PHP and Ruby. Django, Laravel, Rails and Spring Boot each have a package of their own. It plugs into the framework’s mail layer, and every client verifies your webhook signatures for you.
Scaleway publishes three client libraries, for Go, Python and JavaScript, plus a scw command for its whole cloud. It publishes no framework package, so a Django or Laravel project wires the transport itself.
The CLI is a single binary. It sends over either transport and manages scheduled sends. While you develop, it runs a local webhook receiver. It carries a skill file, and a coding assistant reads the real command surface. Start from the SDK documentation(opens in a new tab) or the CLI guide(opens in a new tab) .
Migrating from Scaleway
Install your language’s client, then replace the constructor and the key. The send call keeps its shape, with plain string fields and no Project or region to name.
The same send, Scaleway on the left and mailkube on the right
Scaleway
import { createClient, TransactionalEmail } from "@scaleway/sdk";
const client = createClient({
accessKey: process.env.SCW_ACCESS_KEY,
secretKey: process.env.SCW_SECRET_KEY,
defaultProjectId: process.env.SCW_PROJECT_ID,
defaultRegion: "fr-par",
});
const api = new TransactionalEmail.v1alpha1.API(client);
await api.createEmail({
from: { email: "you@example.com", name: "Your app" },
to: [{ email: "customer@example.com" }],
subject: "Hello world",
text: "It works!",
html: "<p>It works!</p>",
});
- Host
- smtp.tem.scaleway.com
- Port
- 587
mailkube
import { Mailkube } from "@mailkube/mailkube-node";
const mailkube = new Mailkube(process.env.MAILKUBE_API_KEY);
await mailkube.emails.send({
from: "you@example.com",
to: "customer@example.com",
subject: "Hello world",
html: "<p>It works!</p>",
});
- Host
- smtp.mailkube.com
- Port
- 587
SMTP is just as short. Change the host, the port and the credential in your mailer, and leave everything else alone. The messages you already send go out unchanged, and tags, topics and templates arrive as headers when you want them. Nothing forces a cutover date: run both platforms side by side and move one service at a time. The quickstart(opens in a new tab) covers the REST path and the SMTP guide(opens in a new tab) covers the relay.
When Scaleway is the better fit
Scaleway sells sending at infrastructure prices. A team that has already built the webhook plumbing, the templating and the scheduling pays less for the sending itself.
Transactional Email also sits inside Scaleway’s cloud. IAM permissions, Cockpit monitoring, the Terraform provider, one console and one bill come with the account, and a team already there inherits all of them. Messages over their relay run to 50 MB, against 15 MB on a paid plan here.
The pricing page details every plan. The REST API and SMTP relay pages go deeper on the two transports.
Frequently asked questions
What comes with the plan that Scaleway leaves to me?
Why is there no price table on this page?
Are Scaleway webhooks not signed?
Can I keep my SMTP configuration?
Can I schedule a send?
Where do the Scaleway figures come from?
Send your first email today
Start free, no card. Point an existing SMTP client at us, or install an SDK and make one POST.