使用 nodemailer 将表单输入的数据发送到电子邮件
Send data from form input to email with nodemailer
我有一个表单,我希望将输入字段中的数据发送到我的电子邮箱。我正在使用 nodemailer 将它发送到我的电子邮件。我试过使用 req.body.name(输入字段的名称),但它说它是未定义的。任何的想法?
我希望电子邮件显示发件人:XXXX 收件人:XXXX 时间:XX:XX 日期:XX:XX:XX。
提供表格和 node.js 代码。
<form action="/send-email" method="post">
<ul class="inputs">
<li>
<label for="from">From</label>
<input type="text" id="from" name="from" />
</li>
<li>
<label for="to">To</label>
<input type="text" id="to" name="to" />
</li>
<li>
<label for="date">Date</label>
<input type="date" id="date" name="date" />
</li>
<li>
<label for="time">Time</label>
<input type="time" id="time" name="time" />
</li>
<li>
<button>Request</button>
</li>
</ul>
</form>
Node.js
var express = require('express');
var path = require('path');
var app = express();
var bodyParser = require('body-parser');
var nodemailer = require("nodemailer");
var smtpTransport = require('nodemailer-smtp-transport');
app.set('port', 3000);
app.use(express.static(path.join(__dirname, 'public')));
var server = app.listen(app.get('port'), function() {
var port = server.address().port;
console.log('Magic happens on port ' + port);
});
var smtpTransport = nodemailer.createTransport(smtpTransport({
service: 'Gmail',
auth: {
user: 'naomikudren@gmail.com',
pass: '####'
}
}));
app.post('/send-email', function(req, res) {
var mailOptions = {
from: '"Naomi" <naomikudren@gmail.com>', // sender address
to: "naomikudren@gmail.com", // list of receivers
subject: 'Request ', // Subject line
text: req.body.to // plaintext body
};
smtpTransport.sendMail(mailOptions, function(error, info) {
if (error) {
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
res.redirect("/index.html");
});
您没有使用 bodyParser。您需要使用
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())
要完成关于在何处使用 bodyParser 的经过验证的答案,您应该将其放入 index.js 或 server.js 文件中,具体取决于您的体系结构。
例如:
...
app.use(cors());
...
app.use(bodyParser.json());
...
我有一个表单,我希望将输入字段中的数据发送到我的电子邮箱。我正在使用 nodemailer 将它发送到我的电子邮件。我试过使用 req.body.name(输入字段的名称),但它说它是未定义的。任何的想法? 我希望电子邮件显示发件人:XXXX 收件人:XXXX 时间:XX:XX 日期:XX:XX:XX。
提供表格和 node.js 代码。
<form action="/send-email" method="post">
<ul class="inputs">
<li>
<label for="from">From</label>
<input type="text" id="from" name="from" />
</li>
<li>
<label for="to">To</label>
<input type="text" id="to" name="to" />
</li>
<li>
<label for="date">Date</label>
<input type="date" id="date" name="date" />
</li>
<li>
<label for="time">Time</label>
<input type="time" id="time" name="time" />
</li>
<li>
<button>Request</button>
</li>
</ul>
</form>
Node.js
var express = require('express');
var path = require('path');
var app = express();
var bodyParser = require('body-parser');
var nodemailer = require("nodemailer");
var smtpTransport = require('nodemailer-smtp-transport');
app.set('port', 3000);
app.use(express.static(path.join(__dirname, 'public')));
var server = app.listen(app.get('port'), function() {
var port = server.address().port;
console.log('Magic happens on port ' + port);
});
var smtpTransport = nodemailer.createTransport(smtpTransport({
service: 'Gmail',
auth: {
user: 'naomikudren@gmail.com',
pass: '####'
}
}));
app.post('/send-email', function(req, res) {
var mailOptions = {
from: '"Naomi" <naomikudren@gmail.com>', // sender address
to: "naomikudren@gmail.com", // list of receivers
subject: 'Request ', // Subject line
text: req.body.to // plaintext body
};
smtpTransport.sendMail(mailOptions, function(error, info) {
if (error) {
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
res.redirect("/index.html");
});
您没有使用 bodyParser。您需要使用
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())
要完成关于在何处使用 bodyParser 的经过验证的答案,您应该将其放入 index.js 或 server.js 文件中,具体取决于您的体系结构。 例如:
...
app.use(cors());
...
app.use(bodyParser.json());
...