Javascript 具有电子邮件模板的NodeEmailer不发送电子邮件

Javascript 具有电子邮件模板的NodeEmailer不发送电子邮件,javascript,node.js,nodemailer,Javascript,Node.js,Nodemailer,我正在使用nodemailer和npm包电子邮件模板。我没有收到电子邮件。当我设置预览:true时,模板正在工作。控制台上获取错误错误:未定义收件人。为什么会发生此错误?尝试了很多方法,但NodeEmailer每次都发送空邮件。希望你能理解我的问题 错误: Error: No recipients defined at SMTPConnection._formatError (E:\testing\node_modules\nodemailer\lib\smtp-connection\i

我正在使用nodemailer和npm包电子邮件模板。我没有收到电子邮件。当我设置预览:true时,模板正在工作。控制台上获取错误错误:未定义收件人。为什么会发生此错误?尝试了很多方法,但NodeEmailer每次都发送空邮件。希望你能理解我的问题

错误:

Error: No recipients defined
    at SMTPConnection._formatError (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:784:19)
    at SMTPConnection._setEnvelope (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:995:34)
    at SMTPConnection.send (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:615:14)
    at sendMessage (E:\testing\node_modules\nodemailer\lib\smtp-transport\index.js:227:28)
    at E:\testing\node_modules\nodemailer\lib\smtp-transport\index.js:285:25
    at SMTPConnection._actionAUTHComplete (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:1537:9)
    at SMTPConnection.<anonymous> (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:550:26)
    at SMTPConnection._processResponse (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:942:20)
    at SMTPConnection._onData (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:749:14)
    at TLSSocket.SMTPConnection._onSocketData (E:\testing\node_modules\nodemailer\lib\smtp-connection\index.js:195:44)
    at TLSSocket.emit (events.js:210:5)
    at addChunk (_stream_readable.js:309:12)
    at readableAddChunk (_stream_readable.js:290:11)
    at TLSSocket.Readable.push (_stream_readable.js:224:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:182:23) {
  code: 'EENVELOPE',
  command: 'API'
}

带模板的节点邮件程序:

const nodemailer = require('nodemailer');
var generator = require('generate-password');

const Email = require('email-templates');

exports.sendNodeForgotPasswordMail = function (email, GeneratePassword) {
    var transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 587,
        secure: false,
        auth: {
            user: 'my_email',
            pass: 'my_password'
        },
        tls: {
            rejectUnauthorized: false
        }

    });

    const emailVar = new Email({
        message: {
            from: 'testing@gmail.com'
        },
        preview: true,
        send: true,
        transport: {
            jsonTransport: true
        }
    });

    emailVar.send({
        template: 'forget-password',
        message: {
            to: email
        },
        locals: {
            password: GeneratePassword
        }
    }) .then(res => {
        console.log('res.originalMessage', res.originalMessage)
    }).catch(console.error);


    return transporter.sendMail(emailVar, function (err, info) {
        if (err)
            console.log(err);
        else
            console.log(info);
    });
};

Html.pug:

p Your new password is: #{password}

帕格

= `Password reset request`

原因是你不需要nodemailer,而是让你的转运器带有nodemailer,你需要像这样用JSON传递它

exports.sendNodeForgotPasswordMail = function (email, GeneratePassword) {
    var transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 587,
        secure: false,
        auth: {
            user: 'my_email',
            pass: 'my_password'
        },
        tls: {
            rejectUnauthorized: false
        }

    });
变成:

transport: {
        host: 'smtp.gmail.com',
        port: 587,
        secure: false,
        auth: {
            user: 'my_email',
            pass: 'my_password'
        },
        tls: {
            rejectUnauthorized: false
        }

    }

const Email=require('Email-templates') 原因是你不需要nodemailer,而是让你的转运器带有nodemailer,你需要像这样用JSON传递它

exports.sendNodeForgotPasswordMail = function (email, GeneratePassword) {
    var transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 587,
        secure: false,
        auth: {
            user: 'my_email',
            pass: 'my_password'
        },
        tls: {
            rejectUnauthorized: false
        }

    });
变成:

transport: {
        host: 'smtp.gmail.com',
        port: 587,
        secure: false,
        auth: {
            user: 'my_email',
            pass: 'my_password'
        },
        tls: {
            rejectUnauthorized: false
        }

    }

const Email=require('Email-templates') 如果其他人正在研究如何解决此问题,我会根据@Irving Caarmal answer设法使其正常工作,代码如下:

function sendTokenEmail(userEmail, token, templateName) {
  const email = new Email({
    message: {
      from: 'someemail@gmail.com',
    },
    preview: true,
    send: true,
    transport: {
      host: process.env.MAIL_HOST,
      port: process.env.MAIL_PORT,
      auth: {
        user: process.env.MAIL_USER,
        pass: process.env.MAIL_PASS,
      },
    },
  })

  return email
    .send({
      template: templateName,
      message: {
        to: userEmail,
      },
      locals: {
        token,
      },
    })
    .then((res) => {
      console.log('res.originalMessage', res.originalMessage)
    })
   }

如果其他人正在研究如何解决此问题,我会根据@Irving Caarmal answer设法使其正常工作,代码如下:

function sendTokenEmail(userEmail, token, templateName) {
  const email = new Email({
    message: {
      from: 'someemail@gmail.com',
    },
    preview: true,
    send: true,
    transport: {
      host: process.env.MAIL_HOST,
      port: process.env.MAIL_PORT,
      auth: {
        user: process.env.MAIL_USER,
        pass: process.env.MAIL_PASS,
      },
    },
  })

  return email
    .send({
      template: templateName,
      message: {
        to: userEmail,
      },
      locals: {
        token,
      },
    })
    .then((res) => {
      console.log('res.originalMessage', res.originalMessage)
    })
   }

已定义Message.from,但未定义“to”,因为错误表明您尚未定义您的位置。sendMail to。我已尝试。仍然不工作。检查是否定义了
email
var。查看文档中的示例,查看缺少的内容:您的代码看起来非常简单different@Zydnar定义了var电子邮件,本文档仅适用于NodeEmailer,不适用于email-templates.Message.from,但未定义“收件人”因为错误显示您尚未定义您的位置。发送邮件到。我尝试了。仍然不工作。检查是否定义了
email
var。查看文档中的示例,查看缺少的内容:您的代码看起来非常简单different@Zydnarvar电子邮件已定义,本文档仅适用于NodeEmailer,不适用于电子邮件模板。