我在 next.js 中的联系表单有问题,我没有任何错误(已显示),一切正常,直到部署(在 Vercel 上)。我获取我的表格,状态为 200,但我没有收到 Gmail 上的电子邮件。我也没有收到任何其他信息。当我在“开发”和“构建”上测试我的应用程序时,我收到了电子邮件。我在 Gmail 帐户中也有“不太安全的应用程序”选项。这是我在 Next.JS 中的代码:contact.js 中的 fetch 方法: 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");};请帮忙
1 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
由于您的代码在本地而不是在部署环境中运行良好,我有两个建议。
首先,确保您已设置所有环境变量。
其次,您编写代码的方式总是会返回成功,因为它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");
}
});
添加回答
举报
0/150
提交
取消