Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nodeEmailer发送带有空正文的电子邮件_Javascript_Node.js_Pug_Nodemailer - Fatal编程技术网

Javascript nodeEmailer发送带有空正文的电子邮件

Javascript nodeEmailer发送带有空正文的电子邮件,javascript,node.js,pug,nodemailer,Javascript,Node.js,Pug,Nodemailer,我正在使用nodemailer和npm包电子邮件模板。我没有收到电子邮件。当我设置预览:true时,模板正在工作。控制台上获取错误错误:未定义收件人。为什么会发生此错误?尝试了很多方法,但NodeEmailer每次都发送空邮件。希望你能理解我的问题 标题: from: testing@gmail.com to: my_email@gmail.com date: Jan 3, 2020, 3:23 PM subject: New password request mailed-by:

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

标题:

from:   testing@gmail.com
to: my_email@gmail.com
date:   Jan 3, 2020, 3:23 PM
subject:    New password request
mailed-by:  gmail.com
signed-by:  gmail.com
security:    Standard encryption (TLS) Learn more

错误:

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`

看起来你的项目结构不太正确。每个要创建的模板都应该有一个目录,在每个目录中都应该有一个
subject.pug
文件、一个
text.pug
文件(仅用于文本)和一个
html.pug
文件(用于html)

文档中名为
mars
的模板的示例目录结构如下所示:

.
├── app.js
└── emails
    └── mars
        ├── html.pug
        ├── text.pug
        └── subject.pug
对于调试,可以使用调试环境标志:

DEBUG=email-templates node app.js
您还可以通过以下方式查看来自
emailVar.send()
的响应对象中的
originalMessage

.
├── app.js
└── emails
    └── mars
        ├── html.pug
        ├── text.pug
        └── subject.pug
emailVar.send({
...
})
。然后(res=>{
console.log('res.originalMessage',res.originalMessage)
})
.catch(控制台错误);

您可以在此处看到更多高级配置:

我强烈怀疑如果您想连接到gmail SMTP服务器,您需要
安全:true,
。@O.Jones我已经连接到gmail。当您尝试发送电子邮件时,控制台会打印什么?另外,您是否设置了调试环境变量?似乎未设置
email
的值。你能把你收到的电子邮件发到你的收件箱里吗?关于标题(当然是擦洗过的),我在我的问题中添加了标题。有两件事:1)我希望看到更多来自电子邮件原件的标题(例如内容类型),2)标题“新密码请求”中列出的主题与subject.pug(“密码重设请求”)中的主题不同…您确定这些标题来自正确的电子邮件吗?3) 我刚刚注意到你的文件
Html.pug
是大写的,我认为它需要全部小写。