Email SDK
Adapters

Plunk

Send through the Plunk API with reply-to, headers, attachments, and metadata mapped to Plunk data.

The Plunk adapter calls the Plunk send API over fetch — no extra dependency. Plunk takes a single body field, so the adapter sends html when present and falls back to text.

Plunk logo
Plunk
@opencoredev/email-sdk/plunk
OfficialNot API testedRequest tested
Open website

Configure

Create a secret API key in your Plunk project and verify the sender you plan to use in from.

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

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

Prop

Type

Send

Plunk supports headers, attachments, metadata (sent as Plunk data), and a single replyTo (sent as reply, email address only — a second reply-to throws an EmailValidationError).

const result = await email.send({
  from: "Acme <hello@acme.com>",
  to: "user@example.com",
  replyTo: "support@acme.com",
  subject: "Your export is ready",
  html: "<p>Download your workspace export below.</p>",
  headers: { "X-Export-ID": "exp_123" },
  metadata: { exportId: "exp_123" },
  attachments: [
    { filename: "export.csv", content: "name,total\nAda,42", contentType: "text/csv" },
  ],
});

console.log(result.id); // Plunk email id from data.emails[0], falling back to id/emailId

No cc, bcc, or tags

Plunk has no cc, bcc, or tags, so any of them on a message throws an EmailValidationError before a request is made. Check field support before using Plunk in a fallback route.

Verify from the CLI

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

Drop --dry-run for one real smoke send to confirm the API key and verified sender work end to end.

On this page