my-node-mail
v1.0.1
Published
A pure TypeScript library for sending emails via different providers without external dependencies, with React component support
Maintainers
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-mailUso
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 especificadoasync sendMail(content: EmailContent): Promise<EmailResult>: Envía un correoasync verifyConnection(): Promise<boolean>: Verifica la conexión con el servidor de correosetProvider(provider: EmailProvider): void: Cambia el proveedor de correo
Proveedores
GmailProvider: Proveedor para enviar correos a través de GmailOutlookProvider: Proveedor para enviar correos a través de OutlookSMTPProvider: 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
