在控制台中未定义

Undefined in console

我尝试为 nodemailer 制作单独的函数,并在 return.But 中期望布尔值 true 或 false 当邮件发送给用户时我在帐户中收到邮件,但在那之后 [=true 或 false =14=] 我得到的值是未定义的。

function nodeMailer(mailOptions){

 var transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: get.username,
            pass: get.password
        },
        tls: {
            rejectUnauthorized : false
        }
    });


    transporter.sendMail(mailOptions, (error, info) => {
       if(error) return false;

       return true;
    });
}

您未定义,因为 truefalse 应该 return 您的 nodeMailer 函数而不是 transporter.sendMail。 在这种情况下,您可以创建 Promise 来帮助您。

var nodeMailer = function(mailOptions) {
    return new Promise(function(resolve, reject){
        var transporter = nodemailer.createTransport({
            service: 'gmail',
            auth: {
                user: get.username,
                pass: get.password
            },
            tls: {
                rejectUnauthorized : false
            }
        });


        transporter.sendMail(mailOptions, (error, info) => {
           if(error) reject(error);

           resolve(info);
        });
       }
   });
}

然后像下面这样调用你的承诺

nodeMailer(yourOptions).then(function(result) {
    // handle success result here
    return info; 
})
.catch(function(err) {
     // handle your error here
})

您可以阅读有关承诺的更多信息 here。当您需要控制异步流时,它们非常有用。

使用回调或 promise 试试这个。