Next.JS 和 Nodemailer,从联系表单发送电子邮件
Next.JS and Nodemailer, Sending an email from contact form
我在 next.js 中的联系表有问题,我没有任何错误(已显示),一切正常,直到部署(在 Vercel 上)。我获取我的表格,状态为 200,但我没有收到 Gmail 上的电子邮件。我也没有收到任何其他信息。
当我在“开发”和“构建”上测试我的应用程序时,我收到了电子邮件。
我在 Gmail 帐户中也有“不太安全的应用程序”选项。
这是我在 Next.JS 中的代码:
contact.js 中的获取方法:
fetch("/api/contact", {
method: "POST",
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: mailName,
email: mailAddress,
text: mailText,
}),
}).then((res) => {
console.log("Fetch: ", res);
res.status === 200
?
router.push("/success")
: router.push("/error");
在api/contact.js
require("dotenv").config();
const nodemailer = require("nodemailer");
export default (req, res) => {
const { name, email, text } = req.body;
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD,
},
});
const mailOption = {
from: `${email}`,
to: `${process.env.EMAIL}`,
subject: `New mail from ${email}`,
text: `
${name} wrote:
${text}
`,
};
transporter.sendMail(mailOption, (err, data) => {
if (err) {
console.log(err);
} else {
console.log("mail send");
}
});
console.log(name, email, text);
res.send("success");
};
请帮忙
由于您的代码在本地而不是在部署环境中运行良好,我有两个建议。
首先,确保您已设置所有环境变量。
其次,您编写代码的方式总是 return 成功,因为 transporter.sendMail
是异步的,而 res.send
在异步之外。
换个赞,
transporter.sendMail(mailOption, (err, data) => {
if (err) {
console.log(err);
res.send("error" + JSON.stringify(err));
} else {
console.log("mail send");
res.send("success");
}
});
我在 next.js 中的联系表有问题,我没有任何错误(已显示),一切正常,直到部署(在 Vercel 上)。我获取我的表格,状态为 200,但我没有收到 Gmail 上的电子邮件。我也没有收到任何其他信息。 当我在“开发”和“构建”上测试我的应用程序时,我收到了电子邮件。 我在 Gmail 帐户中也有“不太安全的应用程序”选项。
这是我在 Next.JS 中的代码:
contact.js 中的获取方法:
fetch("/api/contact", {
method: "POST",
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: mailName,
email: mailAddress,
text: mailText,
}),
}).then((res) => {
console.log("Fetch: ", res);
res.status === 200
?
router.push("/success")
: router.push("/error");
在api/contact.js
require("dotenv").config();
const nodemailer = require("nodemailer");
export default (req, res) => {
const { name, email, text } = req.body;
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD,
},
});
const mailOption = {
from: `${email}`,
to: `${process.env.EMAIL}`,
subject: `New mail from ${email}`,
text: `
${name} wrote:
${text}
`,
};
transporter.sendMail(mailOption, (err, data) => {
if (err) {
console.log(err);
} else {
console.log("mail send");
}
});
console.log(name, email, text);
res.send("success");
};
请帮忙
由于您的代码在本地而不是在部署环境中运行良好,我有两个建议。
首先,确保您已设置所有环境变量。
其次,您编写代码的方式总是 return 成功,因为 transporter.sendMail
是异步的,而 res.send
在异步之外。
换个赞,
transporter.sendMail(mailOption, (err, data) => {
if (err) {
console.log(err);
res.send("error" + JSON.stringify(err));
} else {
console.log("mail send");
res.send("success");
}
});