在回调中发送电子邮件时,Nodemailer无法正常工作

时间:2014-07-24 06:00:34

标签: javascript node.js express callback nodemailer

以下是通过忘记密码命中发送电子邮件的代码,这是无效的,但是如果相同的代码通过文件运行它正在发送电子邮件..我知道我在回调使用方面做错了什么。 / p>

以下代码正在运行但发送电子邮件 -

app.post('/forget', function(req, res){
  var userEmail = req.body.email;
  User.findOne({email: userEmail}, function(err, user){
    if (err) {
      res.send({"message": "Wrong!", "err": err, "status_code": "500"});
    }
    else{
      var password = "12345";
      var smtpTransport = nodemailer.createTransport("SMTP",{
          service: "Gmail",
          auth: {
              user: "XXXXX@gmail.com",
              pass: "YYYYY"
          }
      });
      var mailOptions = {
          from: "Team | <XXXXX@gmail.com>",
          to: user.email,
          subject: "Password Change",
          text: "Hello world",
          html: "Your password changed successfully."+ "Your new password is "+ "<style='color: red;'>"+ password +"</style>" // html body
      };   
      console.log(mailOptions);
      smtpTransport.sendMail(mailOptions, function(error, response){
          if(error){
              console.log(error);
          }else{
              console.log("Message sent: " + response.message);
          }
      });        

      user.password = password;
      user.save(function(err){
        if (err) return handleError(err);
        else return res.send({"message": "success", "data": user, "status_code": "200"});
      });
    }
  });
});

它正在抛出错误 -

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

仅供参考 - 我在代码上方使用var nodemailer = require("nodemailer");,但事实并非如此。

工作代码 -

现在,如果我将相同的代码放在一个文件中并通过node mail.js命令运行,那么邮件就会成功发送。

如果有任何

,请告诉我这里的错误

工作代码(只是一个重复的代码)

  var password = "12345";
  var smtpTransport = nodemailer.createTransport("SMTP",{
      service: "Gmail",
      auth: {
          user: "XXXXX@gmail.com",
          pass: "YYYYY"
      }
  });
  var mailOptions = {
      from: "Team | <XXXXX@gmail.com>",
      to: user.email,
      subject: "Password Change",
      text: "Hello world",
      html: "Your password changed successfully."+ "Your new password is "+ "<style='color: red;'>"+ password +"</style>" // html body
  };   
  console.log(mailOptions);
  smtpTransport.sendMail(mailOptions, function(error, response){
      if(error){
          console.log(error);
      }else{
          console.log("Message sent: " + response.message);
      }
  }); 

1 个答案:

答案 0 :(得分:1)

这不是防火墙问题。我使用linemanjs通过代理命中api,节点邮件程序不支持当前代理。

  

Nodemailer不支持代理,目前还没有计划   为这些添加任何支持,抱歉。

参考 - Nodemailer Issue With Proxy

作为修复,我在我的clientapp(lineman应用程序)上安装了nodemailer模块,并将数据发送到另一个应用程序,并根据我通过nodemailer发送电子邮件接收令牌。