Email SDK
Reference

Adapter contract

Reference for writing a custom Email SDK adapter.

Custom adapters are plain objects.

import type { EmailProvider } from "email-sdk";

export const customAdapter: EmailProvider = {
  name: "custom",
  async send(message, context) {
    const response = await fetch("https://api.example.com/email", {
      method: "POST",
      signal: context.signal,
      body: JSON.stringify(message),
    });

    const body = await response.json();

    return {
      provider: "custom",
      id: body.id,
      raw: body,
    };
  },
};

EmailProvider

type EmailProvider<TRaw = unknown> = {
  name: string;
  send(message: EmailMessage, context: EmailProviderContext): MaybePromise<EmailProviderResponse>;
  raw?: TRaw;
};

EmailProviderContext

FieldTypeNotes
signalAbortSignalOptional abort signal.
idempotencyKeystringOptional key from the message or send options.
attemptnumberAttempt number for this adapter.
metadataRecord<string, unknown>Metadata passed to send.

Adapter responses

type EmailProviderResponse = {
  id?: string;
  provider: string;
  messageId?: string;
  accepted?: string[];
  rejected?: string[];
  raw?: unknown;
};

Return the provider's raw response in raw when it helps callers debug or inspect provider-specific fields.

On this page