Email SDK
Adapters

Adapters

Configure one of 23 provider API adapters or the built-in SMTP transport, 24 adapters total.

SponsorVerified
Resend logo
Resend

A strong default for developer-first transactional email.

Sequenzy logo
Sequenzy

Use one API for transactional email and email sequences.

JetEmail logo
JetEmail

A focused transactional email API for product teams.

Primitive logo
Primitive

Use when your product already sends through Primitive.

Lettermint logo
Lettermint

Straightforward transactional email with a simple API.

Lettr logo
Lettr

Transactional and marketing email for SaaS, with a REST API and editor.

Postmark logo
Postmark

Great for focused transactional email and deliverability.

SendGrid logo
SendGrid

Best when your product already runs on Twilio SendGrid.

AWS SES logo
AWS SES

A good fit for AWS teams sending at high volume.

Mailgun logo
Mailgun

Use with an existing Mailgun setup or sending domain.

MailerSend logo
MailerSend

A simple API with a friendly dashboard for growing teams.

Brevo logo
Brevo

Use transactional email alongside your Brevo marketing stack.

Mailchimp Transactional logo
Mailchimp Transactional

Best for products already using Mailchimp Transactional.

SparkPost logo
SparkPost

Use when SparkPost already powers your email delivery.

Mailtrap logo
Mailtrap

Useful when testing and production email live in Mailtrap.

Cloudflare Email Sending logo
Cloudflare Email Sending

Send directly from apps running on Cloudflare Workers.

Unosend logo
Unosend

A lightweight choice for straightforward product email.

Scaleway logo
Scaleway

A natural fit for apps hosted in the Scaleway ecosystem.

ZeptoMail logo
ZeptoMail

Use transactional email alongside Zoho and ZeptoMail.

MailPace logo
MailPace

A simple transactional email API for smaller products.

Iterable logo
Iterable

Best for lifecycle email managed through Iterable.

Loops logo
Loops

Send product and lifecycle email through your Loops account.

Plunk logo
Plunk

An open-source-friendly option for product email.

SMTP
SMTP

Connect any existing SMTP server or self-hosted mail system.

Compare support

RequirementCheck first
Monthly cost from 1K to 1M emailsPricing comparison
CC, BCC, reply-to, attachments, tags, or metadataField support
Repeated headers, scheduled delivery, native idempotency, or personalized fanoutDelivery capabilities
Existing SMTP serviceSMTP

Add more than one provider

src/email.ts
import { createEmailClient } from "@opencoredev/email-sdk";
import { resend } from "@opencoredev/email-sdk/resend";
import { smtp } from "@opencoredev/email-sdk/smtp";

export const email = createEmailClient({
  adapters: [
    resend({ apiKey: process.env.RESEND_API_KEY! }),
    smtp({
      name: "backup",
      host: process.env.SMTP_HOST!,
      auth: {
        user: process.env.SMTP_USER!,
        pass: process.env.SMTP_PASS!,
      },
    }),
  ],
  fallback: { adapters: ["backup"] },
});

Email SDK checks every fallback before sending. If your backup cannot handle part of the message, you get an error instead of a half-broken email.

Check your setup without sending

npx email-sdk adapters
npx email-sdk doctor --adapter resend

doctor checks your credentials and required settings. send --dry-run checks the whole message without sending it.

On this page