Compare
The Mailjet alternative with a lower price
Send over REST or SMTP for less than Mailjet asks at every volume it prices. Every webhook arrives signed, and dedicated IPs come with the plan from Elite.
What you pay
Both platforms price by monthly volume. The table takes six volumes. Each row shows the cheapest plan on each side, in your region’s currency.
| Emails a month | mailkube | Mailjet | Saving with mailkube |
|---|---|---|---|
| 10,000 | Launch $9 | Essential $19 | $10 |
| 50,000 | Momentum $19 | Essential $40 | $21 |
| 100,000 | Elite $39 | Premium $112 | $73 |
| 250,000 | Ultimate $129 | Premium $265 | $136 |
| 500,000 | Scale $320 | Premium $499 | $179 |
| 750,000 | Volume $490 | Custom On request |
Mailjet prices its plans up to 500,000 emails a month. Past that its slider offers a quote, so the last row reads on request. Every mailkube plan carries a published price, from Free to Volume.
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. Mailjet offers one dedicated IP on request, from its Premium plan at 100,000 a month.
Feature by feature
The rows below hold what each platform documents today. A docs link opens the mailkube page behind that row.
| Feature | mailkube | Mailjet | Docs |
|---|---|---|---|
| Where account data is stored | European Union | European Union | |
| Dedicated IPs | Included from Elite | Included from Premium | 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) | |
| Scheduled sending | 30 days | Docs(opens in a new tab) | |
| Idempotency keys | Yes | Docs(opens in a new tab) | |
| Outbound body and link scan | Yes | ||
| Webhook event types | 11 | 7 | Docs(opens in a new tab) |
| Webhook signing | HMAC | HTTP Basic | |
| REST API | Yes | Yes | Docs(opens in a new tab) |
| SMTP relay | Yes | Yes | Docs(opens in a new tab) |
| Stored templates, versioned | Yes | Yes | Docs(opens in a new tab) |
| Framework packages | Django, Laravel, Rails, Spring Boot | Laravel | Docs(opens in a new tab) |
| CLI | Yes | Docs(opens in a new tab) |
Two rows carry most of the weight for an application sending transactional email. Every mailkube webhook arrives signed with an HMAC, and the SDKs verify it for you. Every send takes an idempotency key(opens in a new tab) . A retried call then returns the first result instead of sending twice. Mailjet’s documentation describes neither, and protects a callback URL with HTTP basic authentication instead.
Where your data lives
Customer data is stored in the European Union. Our infrastructure runs in European data centres, in the French OVHcloud group.
Mailjet states that its hosting sits inside the European Union as well. 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.
Mailjet’s relay reads its own headers, and a stored template renders there through X-MJ-TemplateID. On that much the two relays do the same work. One header here has no counterpart:
X-Mailkube-Topicattributes the send to a topic, so recipients who opted out are filtered before the message is built
A password reset and a shipping notice can therefore carry the same unsubscribe state as everything else you send, without a list lookup in your application. Tags travel the same way, on X-Mailkube-Tags, and templates on X-Mailkube-Template-Id.
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.
Your stack, already covered
Official SDKs cover Node, Python, Go, Java, PHP and Ruby, plus C# on the Mailjet side. Django, Rails and Spring Boot each have a package of their own here, and both platforms publish one for Laravel. It plugs into the framework’s mail layer, and every client verifies your webhook signatures for you.
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. Mailjet documents no command-line tool. Start from the SDK documentation(opens in a new tab) or the CLI guide(opens in a new tab) .
Migrating from Mailjet
Install your language’s client, then replace the constructor and the key. The send call keeps its shape, and the nested Messages array flattens into plain fields.
The same send, Mailjet on the left and mailkube on the right
Mailjet
import Mailjet from "node-mailjet";
const mailjet = Mailjet.apiConnect(
process.env.MJ_APIKEY_PUBLIC,
process.env.MJ_APIKEY_PRIVATE,
);
await mailjet.post("send", { version: "v3.1" }).request({
Messages: [
{
From: { Email: "you@example.com", Name: "Your app" },
To: [{ Email: "customer@example.com" }],
Subject: "Hello world",
HTMLPart: "<p>It works!</p>",
},
],
});
- Host
- in-v3.mailjet.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 Mailjet is the better fit
Mailjet keeps statistics and campaign history for 13 months on a paid plan. mailkube keeps 7 days of logs on the entry plans and 90 days on Volume. A team that reads its sending history a year back is better served there.
Mailjet is also a marketing platform. Campaigns, contact lists, segmentation, automations and landing pages live in the same account as the transactional sends, and a collaborative editor builds them. Subaccounts start on the Starter plan and reach 20 on Premium, which suits an agency or a multi-brand sender. mailkube sends your application’s email and tells you what happened to it.
The pricing page details every plan. The REST API and SMTP relay pages go deeper on the two transports.
Frequently asked questions
How much cheaper is it than Mailjet?
Why does the last row say on request?
Are Mailjet webhooks not signed?
Can I keep my SMTP configuration?
Can I schedule a send?
Where do the Mailjet 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.