Email SDK
Reference

Client

Reference for createEmailClient, send, sendBatch, and adapter helpers.

createEmailClient(options)

Creates an email client.

const email = createEmailClient({
  adapters,
  defaultAdapter,
  fallback,
  retry,
  hooks,
  plugins,
});
OptionTypeDefault
adaptersEmailProvider[][]
providersEmailProvider[]Alias for adapters
defaultAdapterstringFirst adapter
defaultProviderstringFirst adapter
fallbackstring[][]
retryEmailRetryConfigNo retries
hooksEmailHooksNo hooks
pluginsEmailPlugin[][]

Routing names must be unique. At least one adapter must be registered directly or through a plugin.

fallback is an ordered list of adapter routing names tried after the selected adapter fails. retry applies inside the current adapter before Email SDK advances to a fallback route.

email.send(message, options?)

Sends one message.

const result = await email.send(message, {
  adapter: "resend",
  fallbackAdapters: ["smtp"],
  retries: 2,
  idempotencyKey: "receipt:order_123",
  metadata: {
    route: "checkout.receipt",
  },
});
OptionTypeNotes
adapterstringOverride the default routing name.
providerstringAlias for adapter.
fallbackAdaptersstring[]Replace client-level fallback for this send. Pass [] for no fallback.
fallbackProvidersstring[]Alias for fallbackAdapters.
retriesnumberReplace client-level retry count for this send.
signalAbortSignalAbort provider work when supported.
idempotencyKeystringPassed to adapters that support it.
metadataRecord<string, unknown>Passed to hooks.

Execution order

For one send, Email SDK:

  1. Runs before-send middleware.
  2. Validates the normalized message.
  3. Builds the route order from the selected adapter and fallback adapters.
  4. Tries the selected adapter.
  5. Retries that adapter when retry rules allow it.
  6. Moves to the next fallback adapter after final failure.
  7. Returns the first successful response.
  8. Throws if every route fails.

provider and fallbackProviders are compatibility aliases only. Prefer adapter and fallbackAdapters in new code.

email.sendBatch(messages, options?)

Sends messages one at a time and returns one result per item.

const results = await email.sendBatch([messageA, messageB]);

sendBatch does not throw for the first failed item. Failed sends are returned as { ok: false, index, error }.

email.adapter(name)

Returns a registered adapter or throws EmailProviderNotFoundError.

const resendAdapter = email.adapter("resend");

email.provider(name) is kept as an alias.

email.withAdapter(name)

Returns a small client bound to one adapter.

const transactional = email.withAdapter("postmark");

await transactional.send(message);

email.withProvider(name) is kept as an alias.

On this page