Radon/SDKs/Email
@radonsdk/email16 providers

One send() across 16 providers.

Western, African, and raw cloud — Resend, SendGrid, Postmark, SES, Mailgun, Brevo, and Termii (first-class, not an afterthought). Batch sends, {{variable}} templates, and normalized delivery webhooks.

$npm i @radonsdk/email
email.ts
import { RadonEmail } from "@radonsdk/email";

const email = new RadonEmail({
  providers: { resend: {} },
  defaultFrom: "Acme <hello@acme.com>",
});

await email.send({
  to: "ada@example.com",
  subject: "Welcome, {{name}}!",
  html: "<p>Hi {{name}}, thanks for joining.</p>",
  variables: { name: "Ada" },
});
01what you get
01

16 providers

Resend, SendGrid, and SMTP free; Postmark, SES, Mailgun, Brevo, Mailjet, Termii, and more on Pro.

02

Template interpolation

Write {{name}} in the subject, html, or text and pass variables — free, no template service required.

03

Batch sends

Native bulk on Resend, Postmark, and Mailjet; a sequential fallback everywhere else, with result.batched telling you which ran.

04

Delivery webhooks

Bounces, complaints, and deliveries from every provider, normalized into one event stream — with signature verification where the provider supports it.

05

Scheduling

Set sendAt and Radon schedules the send on providers that support it (Resend, SendGrid, Mailgun, Brevo, and more).

06

Escape hatch

email.native() exposes the provider's own client for dashboards, templates, and provider-only features.

02providers

3 free, 13 on Pro — same call for every one.

3 freeproduction-grade, no license
ResendResendSendGridSendGridSMTPSMTP
13 Proone key unlocks all
PostmarkPostmarkAmazon SESAmazon SESMailgunMailgunBrevoBrevoLoopsLoopsMailjetMailjetSparkPostSparkPostElastic EmailElastic EmailMailerSendMailerSendSMTP2GOSMTP2GOAmazon PinpointAmazon PinpointZeptoMailZeptoMailTermiiTermii
03the API

A small, typed surface.

  • email.send({ to, subject, html, variables }): Promise<SendResult>

    Send one message with {{variable}} interpolation applied.

  • email.sendBatch(messages): Promise<BatchResult>PRO

    Send many at once — native bulk where available.

  • email.templates.register(template): Promise<void>PRO

    Register, update, list, get, and delete reusable templates.

  • email.webhooks.handle(request): Promise<EmailEvent[]>PRO

    Verify + normalize delivery webhooks into events.

04Send a batch
email-example.ts
await email.sendBatch([
  { to: "ada@example.com",  subject: "Hi {{name}}", html: tpl, variables: { name: "Ada" } },
  { to: "grace@example.com", subject: "Hi {{name}}", html: tpl, variables: { name: "Grace" } },
]);

Every message needs a from

Set defaultFrom in config or a from per message — otherwise send() throws. And Termii is template/OTP-only (no arbitrary body) and sends to exactly one recipient per request; the SDK surfaces those provider rules as typed errors, never silent failures.