@davaux/mail
v0.9.0
Published
Zero-dependency SMTP email client for Davaux
Downloads
29
Readme
@davaux/mail
Zero-dependency SMTP email client for Davaux.
SMTP and MIME are implemented directly over node:net/node:tls — no
nodemailer or other dependency. Consistent with @davaux/storage's
hand-rolled S3 client. Supports STARTTLS, implicit TLS, AUTH LOGIN/PLAIN,
multipart/alternative (text + HTML) messages, and a small defineTemplate
helper for authoring hardcoded, typed email templates.
Installation
npm install @davaux/mailUsage
import { createMailer } from '@davaux/mail'
const mailer = createMailer({
host: process.env.SMTP_HOST!,
port: Number(process.env.SMTP_PORT ?? 587),
secure: process.env.SMTP_SECURE === 'true', // true = implicit TLS (465); otherwise STARTTLS is used automatically when offered
auth: { user: process.env.SMTP_USER!, pass: process.env.SMTP_PASSWORD! },
from: process.env.MAIL_NO_REPLY!,
})
await mailer.send({
to: '[email protected]',
subject: 'Welcome',
text: 'Hello!',
html: '<p>Hello!</p>',
})Templates
defineTemplate is an identity helper for authoring hardcoded templates with
an inferred data type — it exists so template declarations read cleanly and
TData isn't written out twice:
import { createMailer, defineTemplate, sendTemplate } from '@davaux/mail'
const passwordReset = defineTemplate<{ displayName: string; resetUrl: string }>(
({ displayName, resetUrl }) => ({
subject: 'Reset your password',
text: `Hi ${displayName}, reset here: ${resetUrl}`,
html: `<p>Hi ${displayName}, <a href="${resetUrl}">reset your password</a>.</p>`,
}),
)
await sendTemplate(mailer, passwordReset, { displayName: 'David', resetUrl }, {
to: '[email protected]',
})Sending several messages
sendMany reuses a single SMTP connection across messages (useful for
notification batches or admin digests) and isolates failures per-message:
const results = await mailer.sendMany(
admins.map((to) => ({ to, subject: 'Server alert', text: '...' })),
)Options
| Option | Type | Description |
|---|---|---|
| host | string | SMTP server hostname |
| port | number | SMTP server port |
| secure | boolean | true for implicit TLS (typically port 465). Default: port === 465 |
| auth | { user, pass } | Optional — omit for unauthenticated relays |
| from | string | Default From address |
| connectionTimeoutMs | number | Default 10000 |
