xTaskjs 1.0 ya está disponible: cuentas por rol, documentación y una interfaz personalizable.

Paquetes

@xtaskjs/mailer

Entrega basada en Nodemailer, renderizado de plantillas, transports con nombre y servicios de correo compatibles con DI.

npm install @xtaskjs/mailer nodemailer reflect-metadata Ruta del paquete: packages/mailer

Resumen

Qué controla este paquete en el runtime

Mailer integra el correo saliente en el mismo ciclo de vida de xtask usado por controladores y persistencia. Registra transports al arrancar, expone servicios y transporters inyectables y admite plantillas inline, EJS o Handlebars.

Qué ofrece

  • registerMailerTransport() admite SMTP, Mailtrap, JSON transport, stream transport y fábricas personalizadas de transporter.
  • MailerService puede enviar correo sin procesar, renderizar plantillas y entregar mensajes basados en plantillas.
  • registerMailerTemplate(), registerEjsTemplateRenderer() y registerHandlebarsTemplateRenderer() permiten vistas de correo reutilizables.
  • InjectMailerService(), InjectMailerTransport() e InjectMailerLifecycleManager() conectan la entrega con servicios gestionados por DI.

Cómo encaja

  • Se inicializa automáticamente mediante @xtaskjs/core cuando el paquete está instalado.
  • Se usa directamente en el ejemplo 08-email_express_app y en 07-security_express_app para notificaciones protegidas del perfil.
  • Funciona bien junto a security cuando las acciones de correo deben ejecutarse tras peticiones autenticadas.

Mapa de uso

Qué peso tiene este paquete dentro del runtime

Arranque

4/5

Inyección de dependencias

4/5

Mensajería

5/5

Renderizado

4/5

Integraciones

4/5

Flujo del paquete

Cómo atraviesa este paquete las fases del runtime de xtaskjs

Antes del arranque

Registra transports, renderers de plantillas y plantillas reutilizables mientras cargan los módulos para que el catálogo de correo esté listo antes de que lleguen peticiones.

Durante CreateApplication()

El ciclo de vida de mailer publica MailerService, transporters con nombre y la verificación opcional de arranque en el contenedor DI.

Durante app.close()

Los transports marcados para apagado se cierran automáticamente para que SMTP o los transports de prueba no dejen recursos abiertos.

Superficie API

Exports representativos del paquete original

Registro de transports

  • registerMailerTransport
  • createMailtrapTransportOptions
  • registerMailerTemplate
  • InjectMailerTransport

Servicio y plantillas

  • MailerService
  • InjectMailerService
  • registerEjsTemplateRenderer
  • registerHandlebarsTemplateRenderer

Superficie de ciclo de vida

  • InjectMailerLifecycleManager
  • initializeMailerIntegration
  • shutdownMailerIntegration

Uso

Flujo típico de adopción

1. Registra uno o más transports

Empieza con un transport por defecto y después añade canales con nombre como notifications cuando deban separarse correos internos y externos.

2. Define plantillas y renderers

Elige plantillas inline o renderers EJS o Handlebars basados en archivos según el nivel de reutilización o colaboración con diseño que necesites.

3. Inyecta MailerService en servicios

Envía mensajes basados en plantillas desde servicios de aplicación gestionados por DI en lugar de dispersar código de transporte por los controladores.

Ejemplo

Fragmento de referencia

Transports con nombre y entrega basada en plantillas
import { Service } from "@xtaskjs/core";
import {
  InjectMailerService,
  MailerService,
  createMailtrapTransportOptions,
  registerMailerTemplate,
  registerMailerTransport,
} from "@xtaskjs/mailer";

const transport = process.env.MAIL_TRANSPORT_PROVIDER === "smtp"
  ? {
      host: process.env.MAIL_SMTP_HOST || "smtp.example.com",
      port: Number(process.env.MAIL_SMTP_PORT || 587),
      secure: process.env.MAIL_SMTP_SECURE === "true",
      auth: {
        user: process.env.MAIL_SMTP_USER || "user",
        pass: process.env.MAIL_SMTP_PASS || "pass",
      },
    }
  : createMailtrapTransportOptions({
      username: process.env.MAILTRAP_SMTP_USER || "user",
      password: process.env.MAILTRAP_SMTP_PASS || "pass",
      host: process.env.MAILTRAP_SMTP_HOST || "sandbox.smtp.mailtrap.io",
      port: Number(process.env.MAILTRAP_SMTP_PORT || 2525),
      secure: process.env.MAILTRAP_SMTP_SECURE === "true",
    });

registerMailerTransport({
  name: "default",
  defaults: { from: "hello@xtaskjs.dev" },
  transport,
  verifyOnStart: false,
});

registerMailerTemplate({
  name: "welcome-email",
  subject: "Welcome {{user.name}}",
  text: "Hello {{user.name}}",
  html: "<h1>Hello {{user.name}}</h1>",
});

@Service()
export class WelcomeMailerService {
  constructor(
    @InjectMailerService()
    private readonly mailer: MailerService
  ) {}

  async sendWelcome(to: string) {
    return this.mailer.sendTemplate("welcome-email", { user: { name: "Ada" } }, {
      message: { to },
    });
  }
}

Ejemplos

Ejemplos oficiales para revisar después

Ejemplos de referencia: 07-security_express_app and 08-email_express_app

Relacionados

Paquetes que suelen usarse junto a este