发送电子邮件后 Nodemailer 非常慢
Nodemailer very slow after sending the email
我正在使用 nodemailer 在用户提交联系表单后发送电子邮件,然后用户将被定向到感谢页面。我现在在 cloud9 上从事这个项目。这是我的代码:
var express = require("express"),
bodyParse = require("body-parser"),
multer = require("multer"),
nodemailer = require("nodemailer");
var app = express();
app.use(bodyParse.urlencoded({extended: true}));
var smtpTransport = nodemailer.createTransport({
service: "Gmail",
auth: {
type: "OAuth2",
user: "xxxxx@gmail.com",
clientId: "xxxxxx",
clientSecret: "xxxxx",
refreshToken: "xxxxx",
accessToken: "xxxxx"
}
});
app.post("/upload", function(req, res){
var mailOptions = {
from: "xxxx <xxxx@gmail.com", // sender address
to: "xxxx@gmail.com", // list of receivers
subject: "xxxx", // Subject line
text: "xxxx",
attachments: [
{ // file on disk as an attachment
filename: 'xxxx.txt',
path: './uploads/' + req.body.filename // stream this file
}
]
};
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message %s sent: %s', info.messageId, info.response);
});
})
邮件可以发送成功,提交表单后几秒就可以看到,但是页面会一直加载直到出现一些错误(我在下面附上了错误信息)。在此期间,我会再收到1或2封相同的邮件。
<html>
<head>
<meta charset='utf-8'>
<title>Error 502 - Bad Gateway</title>
<link rel="stylesheet" type="text/css"
href="https://cdn.c9.io/errors/style.css" />
<style type="text/css">
.error_content {
background: rgba(255, 255, 255, 0.23);
padding: 10px;
width: 641px;
margin: 25px 0;
display: none;
}
#error-msg {
display: block;
}
</style>
</head>
<body class="errorUnknown light">
<div id="wrapper">
<h1>Error 502 - Bad Gateway</h1>
<div class="error_content" id="error-msg">
<p>Please click <a href="javascript:location.reload(true)">here</a> to try again, if the issue persists please contact <a href="https://c9.io/support">support</a></p>
</div>
<a href="http://status.c9.io">Status Page</a> |
<a href="https://c9.io/support">Support</a> |
<a href="https://c9.io/dashboard.html">Dashboard</a> |
<a href="https://c9.io">Home</a>
</div>
</body>
</html>
QQQQQ:我应该怎么做才能解决这个问题?
QQQQQ:是我代码的问题还是cloud9服务器的问题?
那是因为您从未在 app.post()
处理程序中将响应发送回浏览器。因此,浏览器一直在等待从您的服务器收到回音,但它永远不会这样做——最终会超时。这完全是您的代码,与您的云提供商无关。
在您的 app.post()
处理程序中,您需要某种类似 res.send(xxx)
的响应内容,它会告诉浏览器 post 请求已完成。如果此 POST 来自 ajax 调用,那么您可以将您想要的任何响应发送回客户端 Javascript。如果 POST 请求是浏览器中的表单提交,那么您需要发回浏览器将加载并显示给用户的 HTML 页面。
我正在使用 nodemailer 在用户提交联系表单后发送电子邮件,然后用户将被定向到感谢页面。我现在在 cloud9 上从事这个项目。这是我的代码:
var express = require("express"),
bodyParse = require("body-parser"),
multer = require("multer"),
nodemailer = require("nodemailer");
var app = express();
app.use(bodyParse.urlencoded({extended: true}));
var smtpTransport = nodemailer.createTransport({
service: "Gmail",
auth: {
type: "OAuth2",
user: "xxxxx@gmail.com",
clientId: "xxxxxx",
clientSecret: "xxxxx",
refreshToken: "xxxxx",
accessToken: "xxxxx"
}
});
app.post("/upload", function(req, res){
var mailOptions = {
from: "xxxx <xxxx@gmail.com", // sender address
to: "xxxx@gmail.com", // list of receivers
subject: "xxxx", // Subject line
text: "xxxx",
attachments: [
{ // file on disk as an attachment
filename: 'xxxx.txt',
path: './uploads/' + req.body.filename // stream this file
}
]
};
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message %s sent: %s', info.messageId, info.response);
});
})
邮件可以发送成功,提交表单后几秒就可以看到,但是页面会一直加载直到出现一些错误(我在下面附上了错误信息)。在此期间,我会再收到1或2封相同的邮件。
<html>
<head>
<meta charset='utf-8'>
<title>Error 502 - Bad Gateway</title>
<link rel="stylesheet" type="text/css"
href="https://cdn.c9.io/errors/style.css" />
<style type="text/css">
.error_content {
background: rgba(255, 255, 255, 0.23);
padding: 10px;
width: 641px;
margin: 25px 0;
display: none;
}
#error-msg {
display: block;
}
</style>
</head>
<body class="errorUnknown light">
<div id="wrapper">
<h1>Error 502 - Bad Gateway</h1>
<div class="error_content" id="error-msg">
<p>Please click <a href="javascript:location.reload(true)">here</a> to try again, if the issue persists please contact <a href="https://c9.io/support">support</a></p>
</div>
<a href="http://status.c9.io">Status Page</a> |
<a href="https://c9.io/support">Support</a> |
<a href="https://c9.io/dashboard.html">Dashboard</a> |
<a href="https://c9.io">Home</a>
</div>
</body>
</html>
QQQQQ:我应该怎么做才能解决这个问题? QQQQQ:是我代码的问题还是cloud9服务器的问题?
那是因为您从未在 app.post()
处理程序中将响应发送回浏览器。因此,浏览器一直在等待从您的服务器收到回音,但它永远不会这样做——最终会超时。这完全是您的代码,与您的云提供商无关。
在您的 app.post()
处理程序中,您需要某种类似 res.send(xxx)
的响应内容,它会告诉浏览器 post 请求已完成。如果此 POST 来自 ajax 调用,那么您可以将您想要的任何响应发送回客户端 Javascript。如果 POST 请求是浏览器中的表单提交,那么您需要发回浏览器将加载并显示给用户的 HTML 页面。