¿Cómo enviar correos electrónicos usando Node.js?

El correo electrónico es un método ampliamente utilizado para transferir/intercambiar mensajes entre personas. En general, enviamos el correo electrónico con cualquier software o aplicación como Gmail, Outlook, Thunderbird Mail y Yahoo, etc. También podemos codificar el concepto básico de estas aplicaciones en una aplicación node.js mediante el uso de cualquier biblioteca de terceros que pueda interactuar con los sistemas de red y enviar un correo electrónico.

Nodemailer: hay varios módulos disponibles para enviar correos electrónicos, pero el nodemailer es el más popular y nos proporciona un procedimiento y una funcionalidad simples para enviar correos. 

Características de Nodemailer:

  • Admite varias funciones, como agregar HTML en el correo, caracteres Unicode, enviar archivos adjuntos con el texto, etc.
  • Utiliza el protocolo simple de transferencia de correo (SMTP). A continuación se muestra el enfoque paso a paso que se debe seguir para integrar este módulo en nuestra aplicación.

Paso 1: Instalación del módulo: escriba el comando en la terminal para instalar nodemailer y luego impórtelo en la parte superior de su aplicación nodejs.

npm install nodemailer

Ahora estamos listos para importar esto a nuestra aplicación. 

const nodemailer = require('nodemailer');

Paso 2: Crear objeto transportador: existe un método createTransport en nodemailer que acepta un objeto con algunas configuraciones y finalmente devuelve un objeto transportador. Este objeto será necesario más adelante para enviar correos electrónicos. 

const transporter = nodemailer.createTransport(transport[, defaults]);

Aquí estamos usando Gmail como un servicio solo para fines de muestra, aunque nodemailer se puede integrar fácilmente con cualquier otro servicio de correo. En Gmail, podemos hacer que nuestra cuenta sea menos segura o podemos usar la autenticación de seguridad Oauth2 a menos que normalmente Google no permita enviar ningún correo a través de node.js.

Cuenta menos segura: visite este enlace para hacer que su cuenta sea menos segura , después de hacer esto, podemos crear nuestro objeto transportador de trabajo solo con el nombre de usuario y la contraseña de su cuenta de Gmail. 

app.js

const nodemailer = require('nodemailer');
  
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: secure_configuration.EMAIL_USERNAME,
    pass: secure_configuration.PASSWORD
  }
});

Uso de Oauth2: según los documentos oficiales aquí, debemos proporcionar la identificación del cliente, el secreto del cliente, el token de actualización y un token de acceso junto con el nombre de usuario y la contraseña. Siga el enfoque paso a paso para obtener estas configuraciones desde la consola de Google Cloud. 

1. Abra Google Cloud Console: en este paso, obtendremos nuestra identificación de cliente y secreto de cliente. Visite el sitio web de Google Cloud Console y regístrese o inicie sesión usted mismo. Luego proceda a la sección API y servicios desde la barra de navegación más a la izquierda. Ahora echa un vistazo al tablero y crea un proyecto. Después de esto, visite la pantalla de consentimiento de Oauth para registrarse sobre su aplicación en este paso, asegúrese de seleccionar el tipo de usuario externo y agregue algunos/uno Usuarios de prueba. Después de este paso, vaya a la sección de credenciales y haga clic en Crear credenciales y luego elija Oauth2 ClientID y elija el tipo de aplicación como una aplicación web, también asegúrese de agregar el URI de redirección como área de juegos de OAuth ( copiar enlace desde aquí). Finalmente, tendrá éxito en obtener su client_id y client_secret.

2. Abra Oauth2 Playground: Aquí obtendremos nuestro token de actualización y nuestro token de acceso. Visite el área de juegos de OAuth2 , haga clic en el ícono de configuración de oauth2.0 de la derecha y luego marque la casilla de verificación usar sus propias credenciales y proporcione la misma identificación de cliente y secreto que obtuvo de la consola en la nube. Ahora seleccione la API de Gmail para la autorización. Haga clic en Autorizar API y luego autorícelo con la misma identificación de Gmail que ha llenado como usuario de prueba en la sección de credenciales del último paso. Finalmente, haga clic en el código de autorización de intercambio de tokens y esto proporcionará un token de actualización y un token de acceso.

Nota: le sugerimos que abra estos gifs en una pestaña separada y siga ambos enfoques por separado y no se salte ningún tramo, esto le ahorraría mucha confusión. Tampoco intente copiar esta identificación de cliente y secreto de cliente, etc. No va a funcionar.

app.js

const nodemailer = require('nodemailer');
  
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    type: 'OAuth2',
    user: secure_configuration.EMAIL_USERNAME,
    pass: secure_configuration.PASSWORD,
    clientId: secure_configuration.CLIENT_ID,
    clientSecret: secure_configuration.CLIENT_SECRET,
    refreshToken: secure_configuration.REFRESH_TOKEN
  }
});

Con esto, nuestro objeto transportador está listo y ahora podemos enviar nuestros correos electrónicos. 

Paso 3: configurar el correo electrónico: antes de enviar el correo, debemos crear algunas configuraciones de mensajes, como qué enviar, dónde enviar, etc. Es muy fácil crear estas configuraciones, hay varios pares clave-valor , de los cuales puede proporcionar los necesarios. junto con algunos otros valores a la clave predefinida.

Envío de un texto simple a un correo electrónico:

Javascript

const mailConfigurations = {
  
    // It should be a string of sender email
    from: 'mrtwinklesharma@gmail.com',
      
    // Comma Separated list of mails
    to: 'smtwinkle451@gmail.com',
  
    // Subject of Email
    subject: 'Sending Email using Node.js',
      
    // This would be the text of email body
    text: 'Hi! There, You know I am using the'
      + ' NodeJS Code along with NodeMailer '
      + 'to send this email.'
};

Salida: Si enviamos el email con estas configuraciones, se enviará algo así al receptor. Aunque nuestro código está incompleto actualmente, aquí solo le mostramos cómo se verá la configuración de este mensaje cuando se complete el código.

Envío a Múltiples correos: Podemos concatenar más correos con una coma como separador.

Javascript

const mailConfigurations = {
    from: 'mrtwinklesharma@gmail.com',
    to: 'smtwinkle451@gmail.com, anyothergmailid@gmail.com',
      subject: 'Sending Email using Node.js',
    text: 'Hi! There, You know I am using the NodeJS Code'
       + ' along with NodeMailer to send this email.'
};

Envío de contenido HTML: simplemente reemplace el texto sin formato con HTML y proporciónelo a la clave html .

Javascript

const mailConfigurations = {
  from: 'mrtwinklesharma@gmail.com',
  to: 'smtwinkle451@gmail.com',
  subject: 'Sending Email using Node.js',
  html: "<h2>Hi! There</h2> <h5> This HTML content is 
     being send by NodeJS along with NodeMailer.</h5>"
};

Producción:

  • Al enviar algunos archivos adjuntos, Nodemailer es tan flexible al enviar archivos adjuntos que puede enviar cualquier tipo de archivo que esté siendo aceptado por el servicio de correo electrónico.

Javascript

const mailConfigurations = {
  from: 'mrtwinklesharma@gmail.com',
  to: 'smtwinkle451@gmail.com',
  subject: 'Sending Email using Node.js', 
  text:'Attachments can also be sent using nodemailer',
  attachments: [
  {  
    // utf-8 string as an attachment
    filename: 'text.txt',
    content: 'Hello, GeeksforGeeks Learner!'
  },
  {   
    // filename and content type is derived from path
    path: '/home/mrtwinklesharma/Programming/document.docx'
  },
  {   
    path: '/home/mrtwinklesharma/Videos/Sample.mp4'
  },
  {   
    // use URL as an attachment
    filename: 'license.txt',
    path: 'https://raw.github.com/nodemailer/nodemailer/master/LICENSE'
  } 
]
};

Producción:

No solo estos, sino también Nodemailer tienen muchas posibilidades para la configuración de mensajes, puede consultarlas todas desde aquí .

Paso 4: Enviar correo electrónico: utilice cualquiera de los enfoques anteriores para continuar con el objeto transportador y, a continuación, elija cualquier configuración de correo electrónico para enviar correo.
Existe un método sendMail en el objeto transportador que acepta configuraciones de correo electrónico y una función de devolución de llamada que se ejecutará cuando se haya enviado el correo o debido a un error.  

transporter.sendMail(mailConfigurations[, callback]);

Javascript

transporter.sendMail(mailConfigurations, function(error, info){
    if (error) throw Error(error);
       console.log('Email Sent Successfully');
    console.log(info);
});

Paso 5: Combínalos todos

Puede elegir cualquier opción de los pasos 2 y 3. Después de proporcionarlo al método sendMail, podrá enviar correctamente un correo electrónico con node.js.

Explicación: aquí hemos importado el módulo nodemailer al principio y luego usamos el tipo de autenticación Oauth2, luego está la configuración de mensaje más básica que se está usando. Finalmente, el método sendMail está enviando el correo a los destinatarios provistos en la configuración del mensaje.
Nota: – El módulo seguro que se está importando no tiene nada que ver con este nodemailer, solo lo he usado para proteger mis credenciales. 

app.js

const nodemailer = require('nodemailer');
const secure_configuration = require('./secure');
  
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    type: 'OAuth2',
    user: secure_configuration.EMAIL_USERNAME,
    pass: secure_configuration.PASSWORD,
    clientId: secure_configuration.CLIENT_ID,
    clientSecret: secure_configuration.CLIENT_SECRET,
    refreshToken: secure_configuration.REFRESH_TOKEN
  }
});
  
const mailConfigurations = {
    from: 'mrtwinklesharma@gmail.com',
    to: 'smtwinkle451@gmail.com',
    subject: 'Sending Email using Node.js',
    text: 'Hi! There, You know I am using the NodeJS '
     + 'Code along with NodeMailer to send this email.'
};
    
transporter.sendMail(mailConfigurations, function(error, info){
    if (error) throw Error(error);
       console.log('Email Sent Successfully');
    console.log(info);
});

Salida: ejecute este fragmento de código con el comando de Node y esta será la salida en la consola y en la bandeja de entrada de Gmail.

Publicación traducida automáticamente

Artículo escrito por mrtwinklesharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *