Send email with your stack
Working code for 30 stacks: install, send, and the one detail that trips people up in each. Every example carries the idempotency key, which is where most first requests fail.
Every guide is the same shape: install, the smallest send that actually works, what changes in that stack, and the mistake that costs half an hour there. The REST surface underneath is identical, so once one of them works the rest is the same three fields.
JavaScript and TypeScript
- Send email with Next.js: Send email from a route handler or a server action, without leaking the key to the browser.
- Send email with Node.js: The plain Node path: one dependency, or none at all with fetch.
- Send email with Express: Send from a handler, and receive delivery events on a second route.
- Send email with NestJS: A provider you inject, so the key stays in configuration and out of the controllers.
- Send email with Hono: One handler that runs the same on Node, Bun, Deno and the edge.
- Send email with Bun: Bun.serve plus fetch: no dependency needed to send.
- Send email with Deno: Explicit permissions, native fetch, no build step.
- Send email with SvelteKit: A form action or a +server endpoint, with the key from $env/static/private.
- Send email with Nuxt: A Nitro server route, with the key in runtimeConfig.
- Send email with Remix: An action that sends and returns, with no client-side code involved.
- Send email with Astro: An API route in a mostly static site, sending on demand.
Python
- Send email with Python: The official SDK, or one requests call if you would rather not add a dependency.
- Send email with Django: Send from a view or a signal, with the key in settings and out of the repository.
- Send email with FastAPI: An async endpoint that answers immediately and sends in the background.
- Send email with Flask: One route, one call, nothing else in the way.
PHP and Ruby
- Send email with Laravel: A queued job that sends, with the key in config and never in a controller.
- Send email with PHP: Plain PHP with cURL, no framework and no dependency.
- Send email with Ruby on Rails: A service object called from a background job, with the key in credentials.
Compiled languages
- Send email with Go: Standard library only: net/http and encoding/json.
- Send email with Rust: reqwest and serde, with the payload typed at compile time.
- Send email with Elixir: Req in a few lines, ready to be supervised.
- Send email with .NET: A typed HttpClient registered once, injected everywhere.
- Send email with Java: java.net.http, no dependencies, Java 11 and up.
Platforms and edge runtimes
- Send email with Cloudflare Workers: Send from the edge with fetch, and keep the key in a secret binding.
- Send email with Vercel Functions: A function on the default Node runtime, with the key as an environment variable.
- Send email with Supabase Edge Functions: Deno on Supabase: send when a row changes, straight from the database.
- Send email with AWS Lambda: A handler that sends, with the key in Secrets Manager or in the function config.
No-code automation
- Send email with n8n: An HTTP Request node, and the whole API is available to a workflow.
- Send email with Zapier: A Webhooks by Zapier action: POST with a JSON body and one header.
- Send email with Make: An HTTP module in a scenario, with the key in a connection.
Not listed here
Anything that can make an HTTPS request can send: one POST to https://sending.dev/api/v1/emails with a bearer key and a JSON body. See the REST reference for the full set of fields, or the quickstart for the shortest path from nothing to a delivered message.