【发布时间】:2021-11-09 19:39:13
【问题描述】:
我已经为我的作品集网站设置了一个联系表格,效果很好,我有几个朋友使用它给我发了电子邮件。它有四个输入字段,名字、姓氏、电子邮件和消息正文。但是,每隔一段时间我就会收到一封从我的帐户发送的电子邮件“来自未定义的消息”,而其他三个输入字段也都是未定义的。输入字段是必需的,因此它不能是正在提交的空白消息。 Message from contact form。抱歉,如果以前有人问过这个问题,我用谷歌搜索并查看了一些帖子,但找不到任何东西。我只是好奇为什么会这样。另外,我确实使用了 gmail 帐户和 Oauth2 身份验证。
这是联系表单的 HTML:
<form action="#" class="row contact-form">
<div class="col-lg-6 col-md-6 mb-3"><input type="text" placeholder="First Name"
id="inputFirstName" class="shadow form-control form-control-lg" required></div>
<div class="col-lg-6 col-md-6 mb-3"><input type="text" placeholder="Last Name"
id="inputLastName" class="shadow form-control form-control-lg" required></div>
<div class="col-lg-12 mb-3"><input type="text" placeholder="Email Address" id="inputEmail"
class="shadow form-control form-control-lg" required></div>
<div class="col-lg-12 mb-3">
<textarea name="message" id="message" rows="8"
class="shadow form-control form-control-lg" required></textarea>
</div>
<div class="text-center d-grid mt-1">
<button type="submit" class="btn btn-primary rounded-pill pt-3 pb-3">
Send Message
<i class="fas fa-paper-plane"></i>
</button>
</div>
</form>
这就是我的服务器为 nodemailer 设置的方式
//Oauth Variables
const oauth2Client = new OAuth2(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
"https://developers.google.com/oauthplayground"
);
oauth2Client.setCredentials({
refresh_token: process.env.REFRESH_TOKEN,
});
const accessToken = oauth2Client.getAccessToken();
//Contact Form
app.post("/", (req, res) => {
//Nodemailer Transporter
const smtpTransport = nodemailer.createTransport({
service: "gmail",
auth: {
type: "OAuth2",
user: process.env.EMAIL,
accessToken: accessToken,
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
refreshToken: process.env.REFRESH_TOKEN,
},
});
// Nodemailer options
let mailOptions = {
from: req.body.email,
to: process.env.EMAIL,
subject: `Message from ${req.body.email}`,
text: `${req.body.nameFirst} ${req.body.nameLast} \n ${req.body.message}`,
};
//Nodemailer Transporter/Sendmail
smtpTransport.sendMail(mailOptions, (error, info) => {
if (error) {
res.send("error");
} else {
res.send("success");
}
});
});
【问题讨论】:
-
你有一些代码可以分享吗?
-
另请注意,您分享的图片显示您是 Yahoo 地址。你可能关心也可能不关心。
-
感谢 Ian,我添加了一些代码并上传了不同的屏幕截图。
-
可能是机器人提交的表单不正确或为空,或者有人使用不支持
required的旧浏览器提交表单,或者有人手动删除了required,或者有人正在玩弄你的网站试图破解它,或或或... 如果字段未定义,你不应该尝试发送电子邮件。required只是为了方便用户,就像任何客户端验证一样;你总是必须在你的服务器上做同样的验证! (如果您想深入了解,请在遇到此问题时记录完整的原始请求标头+正文和用户 IP。) -
你读过这篇文章并尝试一步一步来-nodemailer.com/about
标签: javascript nodemailer contact-form