Nodemailer SMTP 是否在 azure 函数中工作?

Does Nodemailer SMTP work within azure functions?

我正在尝试 运行 Azure 函数应用程序中的 nodemailer 服务,但它一直抛出 AUTH 错误。下面是我的代码:

require("dotenv").config();
const nodemailer = require("nodemailer");
const getMailIDs = require("./getMailIDs");

module.exports = async function mailSender() {
  let transporter = nodemailer.createTransport({
    host: "smtp.gmail.com",
    port: 465,
    secure: true,
    service: "gmail",
    auth: {
      user: process.env.EMAIL,
      pass: process.env.PASSWORD,
    },
  });

  let mailIDs = await getMailIDs();
  for (i = 0; i < mailIDs.length; i++) {
    await transporter.sendMail({
      from: "abc@gmail.com",
      to: `${mailIDs[i]}`,
      subject: "Test Mail",
      text: {
        path: `emailBody.txt`,
      },
    });
  }
};

这是抛出的错误:

Error: Missing credentials for "PLAIN"
    at SMTPConnection._formatError (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:784:19)
    at SMTPConnection.login (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:438:38)
    at C:\Projects\azure\node_modules\nodemailer\lib\smtp-transport\index.js:271:32
    at SMTPConnection.<anonymous> (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:209:17)
    at Object.onceWrapper (events.js:299:28)
    at SMTPConnection.emit (events.js:210:5)
    at SMTPConnection._actionEHLO (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:1319:14)
    at SMTPConnection._processResponse (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:947:20)
    at SMTPConnection._onData (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:749:14)
    at TLSSocket.SMTPConnection._onSocketData (C:\Projects\azure\node_modules\nodemailer\lib\smtp-connection\index.js:189:44) {       
  code: 'EAUTH',
  command: 'API'
}

当我运行这个脚本文件在本地单独执行时执行。但是当我从 azure 函数应用程序的 index.js 文件调用它时会抛出错误。我不确定 azure 函数应用程序是否必须使用 google api/ OAUTH。


您共享的错误代码表明 NodeMailers 无法验证您的身份。
  code: 'EAUTH',  command: 'API'
发现问题:
auth: {
      user: process.env.EMAIL,
      pass: process.env.PASSWORD,
    },

使用的身份验证变量是环境变量。 这在 运行 本地时有效,因为您必须有一个包含这些变量的 .env 文件托管在本地服务器上。


解决方案:
您需要在 "Configuration"(设置面板)中的 "Application Settings" 下的 as "New Application Settings" 下添加所有环境变量。

文档参考 - https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings?tabs=portal


添加以下值:

Name - EMAIL , value - <youremail>
Name - PASSORD, value - <password>



这应该可以解决身份验证问题。