使用环境变量作为密码时缺少 "PLAIN" 错误的凭据

Missing credentials for "PLAIN" error when using env variabele for password

我正在尝试设置 nodemail,但是 运行 遇到了一个奇怪的问题,我无法解决这个问题。每当我将凭据作为字符串填写时,一切正常(但我当然不希望这样)。如果我开始使用环境变量,则会收到以下错误消息:

UnhandledPromiseRejectionWarning: Error: Missing credentials for "PLAIN"

它正在使用 gmail 帐户发送电子邮件。该帐户启用了不安全帐户的旁路。当我添加 console.log() 语句时,密码清晰可见。有谁知道为什么会这样以及如何解决这个问题。您将在下面找到发送电子邮件的代码片段。

import nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'some-account@gmail.com',
    pass: process.env.PWD,
  },
});

export const sendUserCreateEmail = (to, firstName) => {
  const mailOptions = {
    from: 'someone',
    to: to,
    subject: 'It works',
    html: `
      <p>It works!</p>
    `,
  };

  return transporter.sendMail(mailOptions);
};

我想通了,尽管它更像是一种解决方法。显然,由 dotenv 文件设置的变量在那里不起作用。我修改了我的 npm 命令以包含变量,然后它按预期工作。

PWD=password node index.js

我可以设置这些而无需在本地提交它们,所以我暂时可以接受这个解决方案。仍然不确定为什么不接受 dotenv 变量。

您需要安装dotenv

npm install dotenv

然后将其导入您的文件

const dotenv = require('dotenv');
dotenv.config();

那么它应该可以工作