我想通过nodemailer发送电子邮件后,使用HTML显示确认消息。我对节点很新,所以我不确定我是否遗漏了一些明显的东西。
app.post("/bye", function(req, res){
// send e-mail
var transporter = nodemailer.createTransport({
...
});
var mailOptions = {
...
}
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
... (Something here that is going to print a confirmation message to the html code of the page)
});
res.end("yes");
});
由于
答案 0 :(得分:1)
您应该将呼叫转移到res.end()
回调中的sendMail()
,例如:
app.post("/bye", function (req, res) {
// send e-mail
var transporter = nodemailer.createTransport({});
var mailOptions = {};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
res.status(500).send({
message: 'Unable to send mail'
});
}
console.log('Message sent: ' + info.response);
res.status(200).send({
message: 'Mail sent successfully'
});
});
});
然后,您需要在客户端处理此消息,以向用户显示正常或失败的消息。
答案 1 :(得分:1)
Node完全独立于浏览器运行,因此您无法直接从节点修改浏览器中的HTML。您需要从节点向浏览器发送响应,然后在浏览器中处理该响应。它可能会像这样......
节点
app.post("/bye", function(req, res){
// send e-mail
var transporter = nodemailer.createTransport({
...
});
var mailOptions = {
...
}
transporter.sendMail(mailOptions, function(error, info){
if(error){
console.log(error)
res.end({
success: false,
msg: error
});
}
console.log('Message sent: ' + info.response);
res.end({
success: true
});
});
});
然后在你的客户端javascript中(为了简单起见使用jQuery帖子,但是如果你愿意,可以使用简单的javascript请求或其他库)......
$.post('/bye').then(function(response) {
if (response.success) {
$('#msg').text('Your message was sent');
} else {
$('msg').text(response.msg);
}
}).catch(function(err) {
$('#msg').text('Could not reach server');
});
答案 2 :(得分:0)
res
是发送给客户端的对象。
您可以使用以下方式撰写邮件:
res.send('your message');
我会在最后删除你的res.end("yes");
。它会在您发送邮件之前发送回复。
所以你的代码如下:
app.post("/bye", function(req, res){
// send e-mail
var transporter = nodemailer.createTransport({
...
});
var mailOptions = {
...
}
transporter.sendMail(mailOptions, function(error, info){
if(error){
res.status(500).end('error');
return console.log(error);
}
console.log('Message sent: ' + info.response);
res.status(200).send('your message');
});
});
Tutorialspoint对快递有很好的介绍。也许它可以帮到你。
答案 3 :(得分:0)
也许你可以将res.end("...")
放入.sendMail(... function() {
而不是之后。
答案 4 :(得分:0)
如果你想显示一个完整的html页面,你可以发送和html文件到浏览器:
res.sendfile('views/test.html', {root: __dirname })

否则,如果要在当前html页面上显示错误消息,则应将json数据发送到包含消息,消息类型等的客户端,解析客户端中的json并呈现它:
res.send(JSON.stringify({message: 'message' , type: 'success'});