Node.js expressjs中的NodeEmailer出错?

Node.js expressjs中的NodeEmailer出错?,node.js,mongodb,email,express,nodemailer,Node.js,Mongodb,Email,Express,Nodemailer,我正在使用Nodemailer设置忘记密码功能。由于某种原因,我的代码挂起在smtpTrans.sendMail部分。我是否正确设置了Nodemailer 更新:查看下面的完整代码,包括async.瀑布代码 app.post('/forgot', function(req, res, next) { async.waterfall([ function(done) { crypto.randomBytes(20, function(err, buf) {

我正在使用Nodemailer设置忘记密码功能。由于某种原因,我的代码挂起在smtpTrans.sendMail部分。我是否正确设置了Nodemailer

更新:查看下面的完整代码,包括async.瀑布代码

app.post('/forgot', function(req, res, next) {
  async.waterfall([
    function(done) {
      crypto.randomBytes(20, function(err, buf) {
        var token = buf.toString('hex');
        done(err, token);
      });
    },
    function(token, done) {
      User.findOne({ email: req.body.email }, function(err, user) {
        if (!user) {
          console.log('error', 'No account with that email address exists.');
          return res.redirect('/forgot');
        }
console.log('step 1')
        user.resetPasswordToken = token;
        user.resetPasswordExpires = Date.now() + 3600000; // 1 hour

        user.save(function(err) {
          done(err, token, user);
        });
      });
    },
    function(token, user, done) {
        console.log('step 2')
      var smtpTrans = nodemailer.createTransport({
         service: 'Hotmail', 
        auth: {
          user: 'myemailinfo@email.com',
          pass: '**********'
        }
      });
      var mailOptions = {

        to: user.email,
        from: 'myemailinfo@email.com',
        subject: 'Node.js Password Reset',
        text: 'You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n' +
          'Please click on the following link, or paste this into your browser to complete the process:\n\n' +
          'http://' + req.headers.host + '/reset/' + token + '\n\n' +
          'If you did not request this, please ignore this email and your password will remain unchanged.\n'

      };
      console.log('step 3')
   smtpTrans.sendMail(mailOptions, function(err) {
       console.log(err)
        req.flash('info', 'An e-mail has been sent to ' + user.email + ' with further instructions.');
        done(err, 'done');
      });
    }
  ], function(err) {
    if (err) return next(err);
    console.log(err)
    res.redirect('/forgot');
  });
});

app.get('/forgot', function(req, res) {
  res.render('forgot', {
    user: req.user
  });
});
nodemailer表示提供给
sendMail
回调
采用第二个参数
info
。因此,您可以尝试以下方法:

smtpTrans.sendMail(mailOptions, function(err, info) {
    if (err) {
        console.log(err)
    }
    if (info) {
        console.log(info.response)
    }

    req.flash('info', 'An e-mail has been sent to ' + user.email + ' with further instructions.');
    done(err, 'done');
});
如果调用回调,
info.response
可能会填充来自SMTP邮件程序的一些响应,以指示它为什么不能按预期工作

如果从未调用回调,则可能是服务没有响应,调用也没有超时。您还可以在中提供自定义超时值


最后一个注意事项:Hotmail通过SMTP有100条消息的每日限制,因此您应该考虑使用不同的提供者。

您是指<代码>控制台吗?日志< <代码> >在<代码> sEnmail中<代码>回调永远不会出现吗?您的代码似乎是
async
工作流的一部分(可能是
async.falter()。我更新了代码以显示完整的函数。我错过回电话了吗?谢谢乍一看,这看起来不错。您是否尝试过从独立脚本运行Nodemailer部分,只是为了看看它是否在那里工作?也许连接到Hotmail服务器需要很长时间。@robertklep有趣的想法!让我试着把它调大。谢谢大家!@罗伯特克莱普,真是个好电话!我改用Gmail,它工作得很好。我从来没有想过这是唯一的错误,所以谢谢你!