@aevr/mailer
v1.0.6
Published
Provider-agnostic email adapter framework. Switch between Resend, SMTP/Nodemailer, ZeptoMail, or console with one env var.
Readme
@aevr/mailer
Provider-agnostic email adapter framework for Node.js. Switch between Resend, SMTP/Nodemailer, ZeptoMail, or a console fallback with one environment variable — no code changes needed.
Install
npm install @aevr/mailerQuick start
import { createMailer } from "@aevr/mailer";
const mailer = createMailer(); // reads MAIL_PROVIDER from env
await mailer.send({
to: { email: "[email protected]", name: "User" },
subject: "Hello",
html: "<p>Hello world</p>",
text: "Hello world",
});Or use the singleton wired from env at startup:
import { sendEmail } from "@aevr/mailer";
await sendEmail({ to: { email: "[email protected]" }, subject: "Hi" });Configuration
Set MAIL_PROVIDER to one of: resend | nodemailer | smtp | zeptomail | console (default).
| Provider | Required env vars |
|---|---|
| resend | RESEND_API_KEY |
| nodemailer / smtp | SMTP_HOST, SMTP_PORT, optionally SMTP_USER, SMTP_PASS |
| zeptomail | ZEPTO_API_KEY, optionally ZEPTO_API_URL |
| console | none — logs to stdout |
Optionally set a default sender: MAIL_FROM_EMAIL, MAIL_FROM_NAME.
Programmatic config
const mailer = createMailer({
provider: "resend",
resend: { apiKey: process.env.RESEND_API_KEY },
from: { email: "[email protected]", name: "My App" },
});Templates
import { renderAdminAlertEmail } from "@aevr/mailer/templates";
const html = renderAdminAlertEmail({
level: "error",
title: "Deploy failed",
message: "Container exited with code 1",
});Types
import type { MailAdapter, SendEmailOptions, Recipient, MailerConfig } from "@aevr/mailer";License
MIT
