Appearance
Sending And Preview
sendMail(...) is lazy and fluent. previewMail(...) is immediate. renderMailPreview(...) returns a Response for explicit browser preview routes.
Sending mail
ts
import { sendMail } from '@holo-js/mail'
import welcomeMail from '../../server/mail/welcome'
await sendMail(welcomeMail({
to: '[email protected]',
name: 'Ava',
}))
.using('smtp')
.onQueue('mail')
.delay(300)
.afterCommit()The fluent send API supports:
.using(name).onConnection(name).onQueue(name).delay(value).afterCommit()
Previewing mail in code
Use previewMail(...) when tests or tooling need the normalized preview result:
ts
import { previewMail } from '@holo-js/mail'
import welcomeMail from '../../server/mail/welcome'
const preview = await previewMail(welcomeMail({
to: '[email protected]',
name: 'Ava',
}))The preview result includes:
- resolved sender and recipients
- rendered
html - rendered
textwhen present - attachment metadata
- source metadata
Browser preview routes
Use renderMailPreview(...) inside a normal route handler:
ts
import { renderMailPreview } from '@holo-js/mail'
import welcomeMail from '../../../server/mail/welcome'
export async function GET() {
return renderMailPreview(welcomeMail({
to: '[email protected]',
name: 'Ava',
}))
}Preview formats:
htmljsontext
Example:
ts
return renderMailPreview(welcomeMail({
to: '[email protected]',
name: 'Ava',
}), {
format: 'json',
})Browser preview is development-only by default. renderMailPreview(...) returns 403 when preview is disabled.
Fake, preview, and log drivers
fakecaptures sent mail in memory for testspreviewstores preview artifacts locallylogwrites a summary to logs
These drivers are normal selectable mailers:
ts
await sendMail(welcomeMail({
to: '[email protected]',
name: 'Ava',
})).using('preview')