Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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_Express_Callback_Nodemailer - Fatal编程技术网

Javascript 在回拨中发送电子邮件时NodeEmailer不工作

Javascript 在回拨中发送电子邮件时NodeEmailer不工作,javascript,node.js,express,callback,nodemailer,Javascript,Node.js,Express,Callback,Nodemailer,下面是通过忘记密码点击发送电子邮件的代码,该代码不起作用,但是如果通过文件运行相同的代码,则它将发送电子邮件。请告诉我回调用法的错误 下面是代码,该代码正在工作,但未发送电子邮件- app.post('/forget', function(req, res){ var userEmail = req.body.email; User.findOne({email: userEmail}, function(err, user){ if (err) { res.send

下面是通过忘记密码点击发送电子邮件的代码,该代码不起作用,但是如果通过文件运行相同的代码,则它将发送电子邮件。请告诉我回调用法的错误

下面是代码,该代码正在工作,但未发送电子邮件-

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"});
      });
    }
  });
});
仅供参考-我正在使用
var nodemailer=require(“nodemailer”)位于代码上方,因此情况并非如此

工作代码-

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

让我知道我在这里做错了什么

工作代码(只是重复代码)

var password=“12345”;
var smtpTransport=nodemailer.createTransport(“SMTP”{
服务:“Gmail”,
认证:{
用户:“XXXXX@gmail.com",
通行证:“YYYY”
}
});
var mailpoptions={
来自:“团队|”,
致:user.email,
主题:“密码更改”,
文字:“你好,世界”,
html:“您的密码已成功更改。”+“您的新密码是”+“”+密码+“”//html正文
};   
日志(邮件选项);
发送邮件(邮件选项,函数(错误,响应){
如果(错误){
console.log(错误);
}否则{
console.log(“发送的消息:+response.Message”);
}
}); 

这不是防火墙问题。我使用的是
linemanjs
,它通过代理访问api,目前节点mailer中不支持代理

NodeEmailer不支持代理,目前没有计划 添加对这些的任何支持,抱歉

参考-


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

降级您的node mailer版本0.7.1

在终端中使用此命令:-
npm安装nodemailer@0.7.1--保存

然后签入package.json文件

"dependencies": {
    "body-parser": "~1.15.1",
    "express": "~4.13.4",
    "mongoose": "^4.5.8",
    "nodemailer": "^0.7.1"
}

它适合我。

在应用服务器中运行时,与gmail邮件服务器的传出SMTP连接似乎不起作用。您是在本地运行,还是应用服务器在远程服务器上?如果是这样,可能服务器有防火墙阻止出站连接。@PeterLyons我在本地服务器上使用它,根据错误消息..我认为防火墙是这样的,但它在一个文件中运行时发送邮件,如-
node mail.js
,然后它成功发送邮件。仅供参考-我正在使用前端应用程序,该应用程序正在另一个应用程序上运行api,在该应用程序中,我正在使用代码发送电子邮件,我知道,但只是重复检查,因为这听起来像是一个经典的防火墙问题。您可以在服务器上运行
tcpdump-I eth0-nnn端口25
,并将输出粘贴到此处吗?@Trialcoder:ok,然后(作为root用户)运行
ifconfig
,找出用于发送邮件的接口名称,然后使用该接口名称而不是
eth0
再次运行
tcpdump
  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);
      }
  }); 
"dependencies": {
    "body-parser": "~1.15.1",
    "express": "~4.13.4",
    "mongoose": "^4.5.8",
    "nodemailer": "^0.7.1"
}