Plunk
Send through the Plunk API with reply-to, headers, attachments, and metadata mapped to Plunk data.
Capabilities
| Repeated headers | Idempotency | Scheduling | Personalized |
|---|---|---|---|
| No | none | No | expanded |
These values come from the adapter's exported capabilities declaration. The field support matrix covers normalized message fields.
The Plunk adapter calls the Plunk send API with plain fetch. Plunk takes a single body field, so the adapter sends html when present and falls back to text.
Configure
Create a secret API key in your Plunk project and verify the sender you plan to use in from.
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: [{ name: "X-Export-ID", value: "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/emailIdNo 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 --package @opencoredev/email-sdk email-sdk doctor --adapter plunkPLUNK_API_KEY="sk_..." npx --package @opencoredev/email-sdk email-sdk send \
--adapter plunk \
--from "Acme <hello@acme.com>" \
--to user@example.com \
--subject "Plunk smoke test" \
--text "It works" \
--dry-runDrop --dry-run for one real smoke send to confirm the API key and verified sender work end to end.
Frequently asked questions
Does Email SDK support Plunk?
Yes. Email SDK ships a Plunk adapter imported from @opencoredev/email-sdk/plunk. You keep your Plunk account and credentials; the SDK adds message validation, typed errors, and no-network test adapters around the same send() call used for every other provider.
Which message fields does the Plunk adapter support?
Plunk supports Reply-To address, Custom headers, Attachments, and Metadata. It does not support CC recipients, BCC recipients, Tags, and Scheduled sending (sendAt); Email SDK rejects a message that uses those fields before any request is made.
Can Plunk schedule email for later with Email SDK?
No. Plunk has no provider-side scheduling, so a message with sendAt fails validation. Store the job in your own queue and send when it is due.
Does the Plunk adapter support idempotent sends?
No. Plunk has no provider-side idempotency, so a retried send can be delivered twice. Deduplicate in your own queue before retrying.