Email SDK
Adapters

Adapters

20 provider adapters and transports, each with explicit field support and fail-fast validation.

Email SDK ships 20 adapters. Each is its own entry point — import only what you send through — and each follows the same contract: map the fields the provider supports, throw a validation error for fields it cannot represent. Nothing is silently dropped.

Sponsors

Resend logo
Resend
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/resend
Postmark logo
Postmark
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/postmark
SendGrid logo
SendGrid
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/sendgrid
AWS SES logo
AWS SES
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/ses
Mailgun logo
Mailgun
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailgun
MailerSend logo
MailerSend
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailersend
Brevo logo
Brevo
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/brevo
Mailchimp Transactional logo
Mailchimp Transactional
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailchimp
SparkPost logo
SparkPost
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/sparkpost
Mailtrap logo
Mailtrap
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailtrap
Cloudflare Email Sending logo
Cloudflare Email Sending
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/cloudflare
Scaleway logo
Scaleway
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/scaleway
ZeptoMail logo
ZeptoMail
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/zeptomail
MailPace logo
MailPace
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailpace
Loops logo
Loops
Product-led
OfficialNot API testedRequest tested
@opencoredev/email-sdk/loops
Plunk logo
Plunk
Product-led
OfficialNot API testedRequest tested
@opencoredev/email-sdk/plunk
SMTP
SMTP
Transport
OfficialNo provider APIBuilt-in transport
@opencoredev/email-sdk/smtp

Which adapter should I start with?

If you want…Start with
The fastest first sendResend
Mature transactional delivery controlsPostmark, SendGrid, AWS SES, Mailgun, Unosend, or Brevo
A backup route for production deliveryA primary API adapter plus Postmark or SMTP
Product-triggered or template emailsIterable, Sequenzy, Loops, or Plunk
A cheap or self-managed transportSMTP (built in — no Nodemailer)
Heavy attachment useResend, Postmark, SendGrid, Mailgun, Unosend, MailerSend, Mailtrap, Sequenzy

Whatever you pick, choose fallback routes by field support, not popularity — a fallback only helps if it can carry the same message.

One pattern for every provider

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

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

// route one send through a specific adapter
await email.send(message, { adapter: "smtp" });

Before a provider goes to production, dry-run it, then run one live smoke send from the environment that will send real mail:

npx email-sdk adapters
RESEND_API_KEY="re_..." npx email-sdk send \
  --dry-run \
  --adapter resend \
  --from "Acme <hello@acme.com>" \
  --to user@example.com \
  --subject "Dry run" \
  --text "Validate only"

Status labels

Missing a provider?

Don't fork the official package — wrap the provider in the adapter contract and publish it as a community package.

On this page