next.js 为什么Nodemailer在本地工作而不在生产环境中工作?

9nvpjoqh  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(133)

当我尝试在本地发送电子邮件时,它可以正常工作,但在生产环境中,在网络选项卡中,我可以正确地处理所有问题,只是电子邮件不想发送,而且我没有收到任何错误。

try {
    const { name, email, message } = req.body;

    const transporter = nodemailer.createTransport({
      port: 465,
      host: "smtp.gmail.com",
      auth: {
        user: process.env.NEXT_PUBLIC_GMAIL_EMAIL,
        pass: process.env.NEXT_PUBLIC_GMAIL_PASSWORD,
      },
      secure: true,
    });

    const mailData = {
      from: process.env.NEXT_PUBLIC_GMAIL_EMAIL,
      to: process.env.NEXT_PUBLIC_EMAIL_WHICH_RECIEVES_CONTACT_INFO,
      subject: `Message From ${email}`,
      text: message,
    };

    transporter.sendMail(mailData, function (err, info) {
      if (err) console.log(err);
      else console.log(info);
    });

    res.status(200).json({ message: "Email sent" });
  } catch (error: any) {
    res.status(500).json({ message: error.message });
  }

字符串

6yt4nkrj

6yt4nkrj1#

我在使用nodemailer和Next.js时遇到了类似的问题,尝试将transporter Package 在Promise中,希望它也能为您工作:

await new Promise((resolve, reject) => {
    transporter.sendMail(mailData, (err, info) => {
      if (err) {
        console.error(err);
        reject(err);
      } else {
        resolve(info);
      }
    });
  });

字符串

解释:由于serveless函数的性质,我们必须await才能在继续之前发送电子邮件。如果我们不这样做,serveless函数将在发送电子邮件之前结束(因为它是短暂的)

然而,你应该注意到,这个解决方案是好的发送几封电子邮件,如果你打算批量发送电子邮件,你最好使用一个专用的电子邮件服务,如sendgrid

相关问题