Saltar al contenido

Enviar correo electrónico a través de Node.js usando nodemailer no funciona

Solución:

La respuesta está en el mensaje de Google.

  • Vaya a: https://www.google.com/settings/security/lesssecureapps

  • selecciona el Acceso para aplicaciones menos seguras ajuste a Habilitar

Para la segunda parte del problema, y ​​en respuesta a

De hecho, simplemente estoy siguiendo los pasos de la página de github de nodemailer para que no haya errores en mi código

Lo referiré a la página de github de nodemailer y a este fragmento de código:

var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
    user: '[email protected]',
    pass: 'userpass'
}
});

Se diferencia ligeramente de su código, en el hecho de que tiene: nodemailer.createTransport("SMTP". Elimina el parámetro SMTP y funciona (recién probado). Además, ¿por qué encapsularlo en un servidor http? las siguientes obras:

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: 'xxx',
        pass: 'xxx'
    }
});

console.log('created');
transporter.sendMail({
from: '[email protected]',
  to: '[email protected]',
  subject: 'hello world!',
  text: 'hello world!'
});

Desactualizado: refreshToken y accessToken ya no existen en la salida del archivo JSON

Para aquellos que realmente quieren usar OAuth2 / no quieren hacer que la aplicación sea "menos segura", pueden lograrlo al

  1. Busque "API de Gmail" en la consola de API de Google y haga clic en "Habilitar"
  2. Siga los pasos en https://developers.google.com/gmail/api/quickstart/nodejs. En el archivo quickstart.js, cambiando el SCOPES var de ['https://www.googleapis.com/auth/gmail.readonly'] para ['https://mail.google.com/'] en el archivo js de inicio rápido proporcionado como se sugiere en la resolución de problemas en https://nodemailer.com/smtp/oauth2/
  3. Después de seguir los pasos en (2), el archivo JSON generado contendrá el acessToken, refreshToken, y expires atributos necesarios en los ejemplos de OAuth2 para Nodemailer

De esta manera, puede usar la autenticación OAuth2 como la siguiente

let transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        type: 'OAuth2',
        user: '[email protected]',
        clientId: '000000000000-xxx0.apps.googleusercontent.com',
        clientSecret: 'XxxxxXXxX0xxxxxxxx0XXxX0',
        refreshToken: '1/XXxXxsss-xxxXXXXXxXxx0XXXxxXXx0x00xxx',
        accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x',
        expires: 1484314697598
    }
});

en lugar de almacenar su contraseña de Gmail en texto plano y degradar la seguridad de su cuenta.

Acabo de configurar mi dominio en: smtp.gmail.com y funciona. Estoy usando un VPS Vultr.

el código:

const nodemailer = require('nodemailer');
const ejs = require('ejs');
const fs = require('fs');

let transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: '[email protected]',
        pass: 'xxx'
    }
});

let mailOptions = {
    from: '"xxx" <[email protected]>',
    to: '[email protected]',
    subject: 'Teste Templete ✔',
    html: ejs.render( fs.readFileSync('e-mail.ejs', 'utf-8') , {mensagem: 'olá, funciona'})
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log('Message %s sent: %s', info.messageId, info.response);
});

mi plantilla ejs (e-mail.ejs):

<html>
    <body>
        <span>Esse é um templete teste</span>
        <p> gerando com o EJS - <%=mensagem%> </p>
    </body>
</html>

Asegurarse:

  • instalar ejs: npm install ejs --save
  • instalar nodemailer: npm install nodemailer --save
  • ping a smtp.gmail.com funciona: ping smtp.gmail.com
  • cambio [email protected] a su correo electrónico de gmail
  • cambio [email protected] al correo electrónico que desea enviar un correo electrónico
  • Habilite aplicaciones menos seguras
  • Desactivar Captcha temporalmente

que tenga un lindo día 😉

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.