next.js 当我把我的密码环境变量它不会工作

kpbpu008  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(108)

我的代码在我的localhost中工作如下。我试图做的是把我的密码放在我的.envlocal中,但它不起作用。

工作代码

export default function (req, res) {

    let nodemailer = require('nodemailer')
    const transporter = nodemailer.createTransport({
      port: 465,
      host: "smtp.gmail.com",
         auth: {
              user: 'myEmail@gmail.com',
               pass: 'password123',
           },
      secure: true,
    });

    const mailData = {
        from: 'keshibatmail@gmail.com',
        to: 'kensukeshibata@gmail.com',
        subject: `Message From ${req.body.name}`,
        text: req.body.message + " | Sent from: " + req.body.email,
        html: `<div>${req.body.message}</div><p>Sent from: ${req.body.email}</p>`
    }

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

    console.log(req.body)
    res.send('success')
  }

我尝试了什么我的next.js是

“下一页”:“10.x”
,所以我应该可以使用这个,因为我的next.js高于9.4 https://nextjs.org/docs/api-reference/next.config.js/environment-variables
我创建了.env.local文件NEXT_PUBLIC_PASSWORD=password123
然后process.env.NEXT_PUBLIC_PASSWORD
我也试过不用NEXT_PUBLIC_。
我得到这个错误。响应:'535-5.7.8不接受用户名和密码。

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

kx5bkwkv1#

也许这可以帮助其他人。
首先,你正在使用一个API,因为我读到:

export default function (req, res) {

这意味着您正在显示的代码正在服务器中运行。
在这种情况下,您不需要在env var中使用NEXT_PUBLIC_
只有当你想在浏览器中暴露变量时,才需要这样做。在这种情况下,这段代码不是在浏览器中运行,而是在服务器中运行。此外,重要的是,不要在浏览器中暴露变量(如密码),因为所有人都会看到它们。
还有一件事,我在.env.local文件中使用电子邮件的密码时遇到了类似的问题。我意识到我在句子的最后放了一个空格。
我有MAIL_PASS="xxx",行尾留有一个空格。
我删除了空间,正确的密码被拿走了。

相关问题