Email SDK
Adapters

MailPace

Send through the MailPace API — a deliberately minimal adapter for address fields and body content.

The MailPace adapter calls the MailPace send API over fetch — no extra dependency. It is the smallest adapter surface in the SDK: addresses, subject, and body only, with recipient lists serialized as comma-separated strings.

MailPace logo
MailPace
@opencoredev/email-sdk/mailpace
OfficialNot API testedRequest tested
Open website

Configure

Create a server token in the MailPace dashboard and verify the sending domain.

lib/email.ts
import { createEmailClient } from "@opencoredev/email-sdk";
import { mailpace } from "@opencoredev/email-sdk/mailpace";

export const email = createEmailClient({
  adapters: [mailpace({ apiKey: process.env.MAILPACE_API_KEY! })],
});

Prop

Type

Send

MailPace maps cc, bcc, and replyTo alongside html/text (sent as htmlbody/textbody). That is the whole surface — a good fit for sign-in alerts, receipts, and other plain notifications.

const result = await email.send({
  from: "Acme <hello@acme.com>",
  to: "user@example.com",
  replyTo: "support@acme.com",
  subject: "New sign-in to your account",
  text: "A new sign-in from Berlin, Germany was detected. If this was not you, reset your password.",
});

console.log(result.id); // MailPace message id (`id` or `message_id` in the response)

No headers, attachments, tags, or metadata

MailPace's send endpoint takes none of these, so any of them throws an EmailValidationError before a request is made. Check your production message shape against the field support matrix before routing through MailPace as a fallback.

Verify from the CLI

MAILPACE_API_KEY="..." npx email-sdk doctor --adapter mailpace
MAILPACE_API_KEY="..." npx email-sdk send \
  --adapter mailpace \
  --from "Acme <hello@acme.com>" \
  --to user@example.com \
  --subject "MailPace smoke test" \
  --text "It works" \
  --dry-run

Drop --dry-run for one real send to confirm the token and verified domain work end to end.

On this page