Nodemailer不发送电子邮件,并且不返回错误消息

我想知道为什么nodemailer不发送电子邮件,但它不返回任何错误,所以我不知道该怎么做。 这是我的代码(几乎从nodemailer文档复制):

var cors = require('cors'); var corsOptions = { origin: 'http://davidmichael.me', allowedHeaders: 'accept, content-type', methods: 'GET, POST' }; var nodemailer = require('nodemailer'); module.exports = function(app){ app.options('/email', cors(corsOptions)); app.post('/email', cors(corsOptions), function(req, res){ var transporter = nodemailer.createTransport({ service: 'Gmail', auth: { user: 'my-email', pass: 'my-password' } }); var mailOptions = { from: 'David Michael <my-email>', to: 'recipient-email', subject: 'Just verifying your email address ✔', text: 'Hello to myself!', html: '<p><b>Hello</b> to myself</p>' }; var emailMessage = ""; transporter.sendMail(mailOptions, function(error, info){ if(error){ emailMessage = "there was an error :-(, and it was this: " + error.message; }else{ emailMessage = "Message sent: " + info.response; } }); //transporter.close(); return res.json({ message: "success", email: emailMessage }); }); }; 

每次我尝试它时,它都会成功返回最后的JSON对象,如下所示:

 {"message":"success","email":""} 

也许我应该注意到我正在使用CORS,因为我想要用户的电子邮件地址。 我的客户端应用程序发送一个HTTP POST请求与包含他们的电子邮件地址的JSON对象 – 但是,目前的代码还没有做任何事情。 我想先得到基本的机制。

我正在使用Openshift。 这可以有所作为吗?

另外,我尝试使用非Gmail电子邮件地址,并发生同样的事情。

任何想法,我要去哪里错了?

看起来你是在asynchronous方法返回之前返回你的JSON响应。 尝试将回应放在callback中:

 transporter.sendMail(mailOptions, function(error, info){ if(error){ emailMessage = "there was an error :-(, and it was this: " + error.message; }else{ emailMessage = "Message sent: " + info.response; } return res.json({ message: "success", email: emailMessage }); }); //transporter.close(); 

你可能不想在实践中使用这个。 等待电子邮件发送可能非常耗时,我怀疑你会看到很多超时。 这应该让你在正确的方向!

这也假定您的电子邮件地址已经设置完毕,并且您也input了真实的收件人。 我知道我有Gmail的问题,因为他们真的擅长检测机器人:)