【发布时间】:2014-07-24 06:00:33
【问题描述】:
以下是通过忘记密码命中发送电子邮件的代码,它不起作用,但是如果通过文件运行相同的代码,它正在发送电子邮件..让我知道我在使用回调时做错了什么。
以下是代码,它可以工作但不发送电子邮件 -
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);
}
});
【问题讨论】:
-
看起来在您的应用服务器内运行时,与 gmail 邮件服务器的传出 SMTP 连接不起作用。您是在本地运行这一切,还是在远程服务器上运行应用程序服务器?如果是这样,也许服务器有防火墙阻止出站连接。
-
@PeterLyons 我在本地服务器上使用它,并且根据错误消息..我对防火墙这么想,但是在单个文件中运行它时它正在发送邮件,比如 -
node mail.js和它正在成功发送邮件。仅供参考 - 我正在使用前端应用程序,该应用程序在另一个应用程序上点击 api,在该应用程序中我正在使用代码发送电子邮件 -
我知道,但请仔细检查一下,因为这听起来像是典型的防火墙问题
-
您可以在服务器上运行
tcpdump -i eth0 -nnn port 25并将输出粘贴到此处吗? -
@Trialcoder: 好的,然后(以root身份)运行
ifconfig,找出用于发送邮件的接口名称,然后使用该接口名称而不是@987654330再次运行tcpdump@.
标签: javascript node.js express callback nodemailer