npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

my-node-mail

v1.0.1

Published

A pure TypeScript library for sending emails via different providers without external dependencies, with React component support

Readme

my-node-mail

Una librería de TypeScript/Node.js para enviar correos electrónicos a través de diferentes proveedores (Gmail, Outlook y otros) sin dependencias externas.

Características

  • Implementación pura en TypeScript sin dependencias externas
  • Soporte para múltiples proveedores de correo (Gmail, Outlook, y cualquier servidor SMTP)
  • Interfaz sencilla y fácil de usar
  • Soporte para correos HTML y texto plano
  • Verificación de conexión con los servidores de correo

Instalación

npm install my-node-mail

Uso

Enviar un correo con Gmail

import { Mailer, GmailProvider, EmailContent } from 'my-node-mail';

async function sendEmail() {
  // Crear un proveedor de Gmail
  const gmailProvider = new GmailProvider({
    user: '[email protected]',
    pass: 'tu-contraseña-de-aplicación' // Usar una contraseña de aplicación, no tu contraseña normal
  });

  // Crear un mailer con el proveedor
  const mailer = new Mailer(gmailProvider);

  // Verificar la conexión
  const isConnected = await mailer.verifyConnection();
  console.log('Conexión con Gmail verificada:', isConnected);

  if (isConnected) {
    // Definir el contenido del correo
    const email: EmailContent = {
      from: '[email protected]',
      to: '[email protected]', // Puede ser un string o un array de strings
      cc: '[email protected]', // Opcional
      bcc: '[email protected]', // Opcional
      subject: 'Correo de prueba desde my-node-mail',
      text: 'Este es un correo de prueba enviado usando la librería my-node-mail',
      html: '<h1>Correo de prueba</h1><p>Este es un <b>correo de prueba</b> enviado usando la librería my-node-mail</p>'
    };

    // Enviar el correo
    const result = await mailer.sendMail(email);

    if (result.success) {
      console.log('Correo enviado correctamente con ID:', result.messageId);
    } else {
      console.error('Error al enviar el correo:', result.error);
    }
  }
}

sendEmail().catch(console.error);

Enviar un correo con Outlook

import { Mailer, OutlookProvider, EmailContent } from 'my-node-mail';

async function sendEmail() {
  // Crear un proveedor de Outlook
  const outlookProvider = new OutlookProvider({
    user: '[email protected]',
    pass: 'tu-contraseña'
  });

  // Crear un mailer con el proveedor
  const mailer = new Mailer(outlookProvider);

  // Verificar la conexión
  const isConnected = await mailer.verifyConnection();

  if (isConnected) {
    // Definir el contenido del correo
    const email: EmailContent = {
      from: '[email protected]',
      to: ['[email protected]', '[email protected]'],
      subject: 'Correo de prueba desde my-node-mail',
      text: 'Este es un correo de prueba enviado usando la librería my-node-mail',
      html: '<h1>Correo de prueba</h1><p>Este es un <b>correo de prueba</b> enviado usando la librería my-node-mail</p>'
    };

    // Enviar el correo
    const result = await mailer.sendMail(email);

    if (result.success) {
      console.log('Correo enviado correctamente');
    } else {
      console.error('Error al enviar el correo:', result.error);
    }
  }
}

sendEmail().catch(console.error);

Enviar un correo con componentes React

import React from 'react';
import { Mailer, GmailProvider, EmailContent } from 'my-node-mail';

async function sendEmail() {
  // Crear un proveedor de Gmail
  const gmailProvider = new GmailProvider({
    user: '[email protected]',
    pass: 'tu-contraseña-de-aplicación'
  });

  // Crear un mailer con el proveedor
  const mailer = new Mailer(gmailProvider);

  // Crear un componente React
  const EmailTemplate = ({ name, message }) => (
    <div>
      <h1>Hola, {name}!</h1>
      <p>{message}</p>
    </div>
  );

  // Estilos CSS para el componente
  const styles = `
    h1 { color: #4285f4; }
    p { font-size: 16px; }
  `;

  // Verificar la conexión
  const isConnected = await mailer.verifyConnection();
  
  if (isConnected) {
    // Definir el contenido del correo con el componente React
    const email: EmailContent = {
      from: '[email protected]',
      to: '[email protected]',
      subject: 'Correo con React desde my-node-mail',
      text: 'Este es un correo de respaldo para clientes que no soportan HTML',
      // Usar el componente React para el contenido HTML
      reactComponent: {
        component: <EmailTemplate 
          name="Usuario" 
          message="Este es un correo generado con React" 
        />,
        styles: styles
      }
    };

    // Enviar el correo
    const result = await mailer.sendMail(email);
    
    if (result.success) {
      console.log('Correo con React enviado correctamente');
    } else {
      console.error('Error al enviar el correo:', result.error);
    }
  }
}

sendEmail().catch(console.error);

Enviar un correo con un servidor SMTP personalizado

import { Mailer, SMTPProvider, EmailContent } from 'my-node-mail';

async function sendEmail() {
  // Crear un proveedor SMTP personalizado
  const customProvider = new SMTPProvider({
    host: 'mail.tuservidor.com',
    port: 587,
    secure: false, // true para 465, false para otros puertos
    auth: {
      user: '[email protected]',
      pass: 'tu-contraseña'
    }
  });

  // Crear un mailer con el proveedor
  const mailer = new Mailer(customProvider);

  // Verificar la conexión
  const isConnected = await mailer.verifyConnection();

  if (isConnected) {
    // Definir el contenido del correo
    const email: EmailContent = {
      from: '[email protected]',
      to: '[email protected]',
      subject: 'Correo de prueba desde my-node-mail',
      text: 'Este es un correo de prueba enviado usando la librería my-node-mail',
      html: '<h1>Correo de prueba</h1><p>Este es un <b>correo de prueba</b> enviado usando la librería my-node-mail</p>'
    };

    // Enviar el correo
    const result = await mailer.sendMail(email);

    if (result.success) {
      console.log('Correo enviado correctamente');
    } else {
      console.error('Error al enviar el correo:', result.error);
    }
  }
}

sendEmail().catch(console.error);

API

Clases

Mailer

La clase principal para enviar correos.

  • constructor(provider: EmailProvider): Crea una nueva instancia con el proveedor especificado
  • async sendMail(content: EmailContent): Promise<EmailResult>: Envía un correo
  • async verifyConnection(): Promise<boolean>: Verifica la conexión con el servidor de correo
  • setProvider(provider: EmailProvider): void: Cambia el proveedor de correo

Proveedores

  • GmailProvider: Proveedor para enviar correos a través de Gmail
  • OutlookProvider: Proveedor para enviar correos a través de Outlook
  • SMTPProvider: Proveedor genérico para enviar correos a través de cualquier servidor SMTP

Utilidades

  • ReactEmailRenderer: Utilidad para renderizar componentes React a HTML para correos electrónicos

Interfaces

EmailContent

Interfaz para el contenido del correo.

interface EmailContent {
  from: string;
  to: string | string[];
  cc?: string | string[];
  bcc?: string | string[];
  subject: string;
  text?: string;
  html?: string;
  reactComponent?: ReactComponentOptions; // Para enviar componentes React
  attachments?: Attachment[];
}

ReactComponentOptions

Interfaz para las opciones de componentes React en los correos.

interface ReactComponentOptions {
  component: React.ReactElement; // El componente React a renderizar
  styles?: string | Record<string, any>; // Estilos CSS como string o objeto
}

EmailResult

Interfaz para el resultado del envío de un correo.

interface EmailResult {
  success: boolean;
  messageId?: string;
  error?: Error;
}

EmailConfig

Interfaz para la configuración de un proveedor de correo.

interface EmailConfig {
  host: string;
  port: number;
  secure: boolean;
  auth: {
    user: string;
    pass: string;
  };
}

Notas

  • Para Gmail, necesitas usar una "contraseña de aplicación" en lugar de tu contraseña regular. Puedes generar una en la configuración de seguridad de Google.
  • La librería usa SMTP estándar para conectarse a los servidores de correo.
  • La implementación no incluye soporte para adjuntos en esta versión, pero puede ser añadida siguiendo el patrón de diseño establecido.

Licencia

ISC