Mailtrap
Send through the Mailtrap Email Sending API with full field support and provider-side message inspection.
The Mailtrap adapter calls the Mailtrap Email Sending API over fetch — no extra dependency. It supports every common transactional field, and Mailtrap's inspection tooling makes it a natural pick for staging environments.
@opencoredev/email-sdk/mailtrapConfigure
Create a Mailtrap API token with Email Sending permission and verify your sending domain.
import { createEmailClient } from "@opencoredev/email-sdk";
import { mailtrap } from "@opencoredev/email-sdk/mailtrap";
export const email = createEmailClient({
adapters: [mailtrap({ apiKey: process.env.MAILTRAP_API_KEY! })],
});Prop
Type
Send
Mailtrap maps cc, bcc, headers, attachments, metadata, and tags — with two limits: at most one tag (its value becomes the Mailtrap category) and at most one replyTo. metadata is sent as custom_variables with values stringified (null becomes "").
const result = await email.send({
from: "Acme <hello@acme.com>",
to: "user@example.com",
cc: "billing@acme.com",
replyTo: "support@acme.com",
subject: "Your receipt for order ord_123",
html: "<p>Thanks for your order — receipt attached.</p>",
tags: [{ name: "type", value: "receipt" }],
metadata: { orderId: "ord_123" },
attachments: [
{ filename: "receipt.pdf", path: "./receipts/ord_123.pdf" },
],
});
console.log(result.messageId); // first entry of Mailtrap's message_idsOne tag, one reply-to
A second tag or a second replyTo throws an EmailValidationError before any request. Trim to
one of each when Mailtrap sits in a fallback route behind
a multi-tag adapter.
Verify from the CLI
MAILTRAP_API_KEY="..." npx email-sdk doctor --adapter mailtrapMAILTRAP_API_KEY="..." npx email-sdk send \
--adapter mailtrap \
--from "Acme <hello@acme.com>" \
--to user@example.com \
--subject "Mailtrap smoke test" \
--text "It works" \
--dry-runDrop --dry-run for one real smoke send — and confirm the token targets the intended Mailtrap project before pointing production at it.
