猿问

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

我在 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");

};

请帮忙


慕田峪7331174
浏览 90回答 1
1回答

一只萌萌小番薯

由于您的代码在本地而不是在部署环境中运行良好,我有两个建议。首先,确保您已设置所有环境变量。其次,您编写代码的方式总是会返回成功,因为它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");    }});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答