A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

C贸mo enviar emails con Node.js

15/20
Recursos

Aportes 9

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Esto me viene genial para mi portfolio y una landingpage 馃殌

Holaaa !!

Aca encontraran la documentacion de nodemailer

npm install nodemailer

Les dejo el template de Nodemailer que se usa en el video:

"use strict";
const nodemailer = require("nodemailer");

// async..await is not allowed in global scope, must use a wrapper
async function main() {
  // Generate test SMTP service account from ethereal.email
  // Only needed if you don't have a real mail account for testing
  let testAccount = await nodemailer.createTestAccount();

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
      user: testAccount.user, // generated ethereal user
      pass: testAccount.pass, // generated ethereal password
    },
  });

  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: '"Fred Foo 馃懟" <[email protected]>', // sender address
    to: "[email protected], [email protected]", // list of receivers
    subject: "Hello 鉁", // Subject line
    text: "Hello world?", // plain text body
    html: "<b>Hello world?</b>", // html body
  });

  console.log("Message sent: %s", info.messageId);
  // Message sent: <[email protected]>

  // Preview only available when sending through an Ethereal account
  console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
  // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}

main().catch(console.error);

No intenten robarle la cuenta de prueba al profe, jaja, estos hackers no dejan a nadie tranquilo

Por alguna raz贸n que no llego a comprender obtuve este error al seguir la clase:

node:internal/process/promises:246
          triggerUncaughtException(err, true /* fromPromise */);
          ^

Error: self signed certificate in certificate chain

Lo solucion茅 agregando el siguiente c贸digo en createTransport:

tls: {
			rejectUnauthorized: false
		}

Si alguien me puede explicar por que tuve este error le agradezco 馃槂

Para los que definireron las variables de ambiente con la contrase帽a y el email, recordemos que debemos dentener y volver a correr nuestro backend, debido a que las variables de ambiente no poseen live reloading.

looking good 馃懡

Tutorial actual de configurar contrase帽a de aplicaci贸n

https://support.google.com/accounts/answer/185833?hl=es

Para hacer la recuperaci贸n de contrase帽as se utilizar谩 la librer铆a Nodemailer, el comando de instalaci贸n es npm install nodemailer.

Nos brinda un c贸digo base:

"use strict";
const nodemailer = require("nodemailer");

// async..await is not allowed in global scope, must use a wrapper
async function main() {
  // Generate test SMTP service account from ethereal.email
  // Only needed if you don't have a real mail account for testing
  let testAccount = await nodemailer.createTestAccount();

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
      user: testAccount.user, // generated ethereal user
      pass: testAccount.pass, // generated ethereal password
    },
  });

  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: '"Fred Foo 馃懟" <[email protected]>', // sender address
    to: "[email protected], [email protected]", // list of receivers
    subject: "Hello 鉁", // Subject line
    text: "Hello world?", // plain text body
    html: "<b>Hello world?</b>", // html body
  });

  console.log("Message sent: %s", info.messageId);
  // Message sent: <[email protected]>

  // Preview only available when sending through an Ethereal account
  console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
  // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}

main().catch(console.error);

La librer铆a tiene un servidor que emula pruebas de email (testAccount), en transporter se ve por d贸nde se va a enviar el correo, qu茅 servidor de smtp, se coloca la configuraci贸n del email. En un email real, se cambia el port a 465, se coloca true en secure y se cambian los datos de la propiedad auth por el email y password que se usar谩 en la aplicaci贸n.

En info se coloca de qu铆en, para qui茅n, el asunto y cuerpo del mensaje.

Para usar gmail como servidor smtp, en la opci贸n de Cuenta 鈫 Seguridad, se crea una contrase帽a para aplicaci贸n (se debe tener configurada la verificaci贸n en dos pasos). Esa contrase帽a ser谩 煤nicamente para la aplicaci贸n y debe ser puesta como variable de entorno al igual que el user (email). Por ejemplo:

const nodemailer = require('nodemailer');

// async..await is not allowed in global scope, must use a wrapper
async function sendMail() {
  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    secure: true, // true for 465, false for other ports
    port: 465,
    auth: {
      user: '[email protected]',
      pass: 'jgrcrj3tgf3knvs',
    },
  });

  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: '"Platzinautas Boo 馃懟" <[email protected]>', // sender address
    to: '[email protected]', // list of receivers
    subject: 'Nuevo correo de prueba', // Subject line
    text: 'Estoy usando Nodemailer!', // plain text body
    html: '<b>隆Holaaaaaaaaaa!</b>', // html body
  });

  console.log('Message sent: %s', info.messageId);
  // Message sent: <[email protected]>

  // Preview only available when sending through an Ethereal account
  console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
  // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}

sendMail();