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
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/resendPostmark
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/postmarkSendGrid
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/sendgridAWS SES
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/sesMailgun
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailgunMailerSend
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailersendBrevo
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/brevoMailchimp Transactional
Popular APIs
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailchimpSparkPost
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/sparkpostMailtrap
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailtrapCloudflare Email Sending
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/cloudflareScaleway
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/scalewayZeptoMail
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/zeptomailMailPace
Infrastructure
OfficialNot API testedRequest tested
@opencoredev/email-sdk/mailpaceLoops
Product-led
OfficialNot API testedRequest tested
@opencoredev/email-sdk/loopsPlunk
Product-led
OfficialNot API testedRequest tested
@opencoredev/email-sdk/plunkSMTP
SMTP
Transport
OfficialNo provider APIBuilt-in transport
@opencoredev/email-sdk/smtpWhich adapter should I start with?
| If you want… | Start with |
|---|---|
| The fastest first send | Resend |
| Mature transactional delivery controls | Postmark, SendGrid, AWS SES, Mailgun, Unosend, or Brevo |
| A backup route for production delivery | A primary API adapter plus Postmark or SMTP |
| Product-triggered or template emails | Iterable, Sequenzy, Loops, or Plunk |
| A cheap or self-managed transport | SMTP (built in — no Nodemailer) |
| Heavy attachment use | Resend, 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.

