@chrono-os/email-transactional
v0.3.1
Published
Email transacional (Resend) com templates para lead magnet, order paid, manual fallback + unsubscribe token signing + RFC 8058 List-Unsubscribe headers
Maintainers
Readme
@chrono-os/email-transactional
E-mail transacional pelo Resend: template HTML com a marca do app, link de descadastro assinado (HMAC-SHA256) e cabeçalhos RFC 8058 (List-Unsubscribe + one-click, o botão nativo de descadastro no Gmail, Outlook e Apple Mail).
yarn add @chrono-os/email-transactional resendimport { buildEmailService, verifyUnsubscribeToken } from '@chrono-os/email-transactional'
const email = buildEmailService({
resendApiKey: process.env.RESEND_API_KEY, // sem ela: modo bootstrap, tudo vira { kind: 'skipped' }
emailFrom: 'Nina | Minha Marca <[email protected]>',
unsubscribeSecret: process.env.UNSUBSCRIBE_SECRET, // sem ela: sem link nem cabeçalho de descadastro
siteUrl: 'https://meusite.com.br',
unsubscribePath: '/cancelar', // default
branding: { siteName: 'Minha Marca', primaryColor: '#184E77', logoUrl: 'https://meusite.com.br/logo.png' },
})
const r = await email.sendEmail({
to: '[email protected]',
subject: 'Seu material chegou',
preheader: 'O link está aqui dentro',
title: 'Seu material chegou',
body: '<p>…</p>',
cta: { label: 'Baixar', href: 'https://…' },
})
// r: { kind: 'sent', id } | { kind: 'skipped', reason } | { kind: 'failed', error } — nunca lança
// na rota /cancelar
const v = verifyUnsubscribeToken(token, process.env.UNSUBSCRIBE_SECRET!) // { ok: true, email } | { ok: false, reason }Modo pronto (0.3.0)
await email.sendEmail({ to, subject, html: meuHtml, text: meuTexto, replyTo: '[email protected]' })
await email.sendEmail({ to, subject, text: corpoEscritoNoPainel }) // só textoSai como veio, sem layout nem rodapé. No modo template, branding pode vir por envio (white-label) e branding.footerNote troca ou tira (null) a frase do rodapé. timeoutMs (default 15 s) evita que um Resend lento trave a request.
Entradas
| Import | O que tem |
|---|---|
| @chrono-os/email-transactional ou /core | buildEmailService, signUnsubscribeToken, verifyUnsubscribeToken |
| /templates | wrapHtml, escapeHtml, BrandingConfig |
| /fastify | alias antigo do /core (nunca teve nada de Fastify); sai na 1.0 |
Até a 0.1.0 este README documentava emailTransactionalPlugin, sendLeadMagnet, sendOrderPaid e sendOrderManualFallback, que nunca existiram no código. O envio é um só (sendEmail); o conteúdo de cada tipo de e-mail é do app.
Versionamento
SemVer. Tag v* → npmjs.org.
