Migrate
Move from Resend, Postmark, or Mailgun without the rewrite.
Mailfully is designed for a low-risk cutover. The API and SDK feel familiar, the SMTP relay needs zero code changes, and per-message debug logs mean you can verify every step of the migration.
Your code barely changes
If you are on Resend today, the send call is nearly identical — swap the client and the API key.
// Before — a typical Resend send
import { Resend } from "resend";
const resend = new Resend(process.env.RESEND_API_KEY);
const { data, error } = await resend.emails.send({
from: "[email protected]",
to: "[email protected]",
subject: "Welcome aboard",
html: "<p>Thanks for signing up!</p>",
});// After — the same shape with @mailfully/node
import { Mailfully } from "@mailfully/node";
const mailfully = new Mailfully({ apiKey: process.env.MAILFULLY_API_KEY ?? "" });
const { data, error } = await mailfully.emails.send({
from: "[email protected]",
to: "[email protected]",
subject: "Welcome aboard",
html: "<p>Thanks for signing up!</p>",
});Or change nothing and use SMTP
Coming from Postmark or Mailgun over SMTP? Re-point your existing configuration. Your API key is the SMTP password.
# Or keep your existing SMTP integration — just point it at us.
SMTP_HOST=smtp.mailfully.com
SMTP_PORT=587
SMTP_USERNAME=<your-smtp-username>
SMTP_PASSWORD=<your-mailfully-api-key>What you get on day one
API parity
Send, batch, schedule, cancel, retrieve, and list — plus domains, API keys, webhooks, and suppressions. The resource model maps cleanly onto what you already use, so most code changes are an import and a base URL.
Drop-in SMTP
Not ready to change code? Use the SMTP relay. Point your existing mailer at our host with your API key as the password and you are sending through Mailfully without touching application code.
The { data, error } SDK
@mailfully/node returns a typed { data, error } tuple and never throws — the same ergonomics as Resend's SDK, fully typed in TypeScript, with idempotency keys for safe retries.
Per-message debug logs
The thing you will miss the least about your old provider: opaque failures. Every message keeps its full event timeline and the raw SMTP conversation, so a failed cutover send is debuggable in seconds.
A safe cutover, in four steps
- Verify your sending domain and publish the DKIM/SPF records (we check alignment for you).
- Send a few test messages and confirm them in the per-message debug log.
- Cut over a low-risk message stream first (for example, password resets) and watch deliverability.
- Move the rest once you are confident — your old provider stays as a fallback until you are ready to turn it off.
Resend, Postmark, and Mailgun are trademarks of their respective owners. References here are for comparison and interoperability only and do not imply affiliation or endorsement.