Python
Sync and async clients, fully typed.
Node
Zero dependencies; one build from servers to edge runtimes.
Go
Standard library only; one client safe for every goroutine.
PHP
PSR-18 transport, named arguments throughout.
Ruby
Zero runtime dependencies, keyword arguments, RBS signatures.
Java
Zero runtime dependencies, built for virtual threads.
Framework integrations
Four packages plug mailkube into a framework’s own mail machinery, so code that already sends mail keeps working unchanged, and webhooks arrive in the framework’s own event idiom:Django
An email backend for
send_mail, plus an Anymail backend and a webhook signal.Laravel
A
mailkube mail transport for the Mail facade, plus a webhook event.Ruby on Rails
An ActionMailer delivery method, plus webhooks as ActiveSupport notifications.
Spring Boot
A starter providing
MailSender, plus webhooks as application events.What every SDK shares
- The client reads
MAILKUBE_API_KEYfrom the environment when no key is passed, so credentials stay out of code. - A client keeps the key it was built with, and its
credentialnamespace describes that key. A second key needs a second client. - There are deliberately no built-in retries. A rate-limit error carries the server’s own retry delay, a server error is safe to retry with backoff, and an idempotency key makes the retry safe.
- Errors carry the API’s machine-readable
name; branch on it, never on message text, which is free to change. See Errors. - Webhook helpers verify the signature over the raw received bytes, and an endpoint is activated only after echoing the
GET hub.challengeprobe. See Webhooks.
Requirements
Serverless
Every SDK runs on function platforms the way it runs on a server, wherever its runtime floor above is met: build the client once at module scope, and a reused container reuses it. The Node SDK goes further. It uses web standards only, so one published build also runs on edge runtimes, each exercised in CI:Cloudflare Workers
No
nodejs_compat flag. The key arrives per request on env, so build the client inside the handler.Deno
Import straight from npm with the
npm: specifier; no build step.Bun
bun add the same package. ESM and CommonJS both resolve.No SDK for your stack
REST API
Send from anything that speaks HTTP. One endpoint, JSON in, message id out.
Relay sidecar
Point an existing SMTP client at a local relay container instead.