我在节点中创建了一个端点,当从一个简单的html页面调用该端点时,它将发送一封电子邮件。一切都按预期进行,我可以单击按钮并发送电子邮件,但是当我不在本地网络范围内时,情况就变糟了。
我能够使用apache服务器访问所有页面,但是每当点击电子邮件按钮时,我都会遇到ERR_CONNECTION_TIMED_OUT
,而且似乎无法弄清楚为什么。
我已经设置了路由器,以将进入端口8080的所有流量转发到apache服务器,并将进入端口8081的所有流量转发到端点/sendMail
托管页面的服务器位于一组iptables规则的后面,但此后我将规则设置为空规则集,无济于事
作为参考
mail.js
let bodyParser = require('body-parser');
let multer = require('multer');
let cors = require('cors');
let url = require('url');
let express = require('express');
let app = express();
let nodemailer = require('nodemailer');
let fs = require('fs');
app.use(cors());
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
//app.use(multer());
/**
*
* Function to hopefully send an email :)
*/
app.post("/sendMail", function (req, res) {
console.log("HERE");
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'bodycentralprintingsite@gmail.com',
pass: 'b0dyCenTral!'
}
});
let mailOptions = {
from: 'bodycentralprintingsite@gmail.com',
to: 'justinbng36@gmail.com',
subject: 'New Order ' + new Date(),
text: 'Order recieved',
attachments: [
{
path: req.body.image
}
]
};
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
});
app.listen(8081);
clientside.js
$('#Submit').click(function(){
console.log("HERE");
html2canvas(document.querySelector("#Submit")).then(canvas => {
$.ajax({
type: 'POST',
// url: 'http://192.168.1.23:8080/sendMail',
url: 'http://68.228.250.168:8081/sendMail',
data: canvas ,
contentType: "application/json; charset=utf-8",
success: function(resultData) {console.log('done')}
});
});
});
编辑:托管网页的服务器还负责启动运行mail.js
的节点服务器。但是,当将网址保留为clientside.js
中的内部IP时(如注释的网址行中所示),我仍然面临超时错误
答案 0 :(得分:0)
您正在超时,因为您没有在电子邮件成功后向客户端发送响应。因此客户端会一直等待响应,直到达到超时限制。
尝试更改此行:
console.log('Email sent: ' + info.response);
对此:
res.status(200).json(info.response)
还建议您在错误处理程序中添加res.status(500).json(error)