为了账号安全,请及时绑定邮箱和手机立即绑定

Next.JS 和 Nodemailer,从联系表单发送电子邮件

Next.JS 和 Nodemailer,从联系表单发送电子邮件

慕田峪7331174 2023-02-17 10:29:20
我在 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");

    }

});


查看完整回答
反对 回复 2023-02-17
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信