与 Firebase 函数一起使用时,Nodemailer 无法正常工作

Posted

技术标签:

【中文标题】与 Firebase 函数一起使用时,Nodemailer 无法正常工作【英文标题】:Nodemailer not working when used with Firebase Functions 【发布时间】:2022-01-23 22:44:35 【问题描述】:

当在我的网络应用中创建新用户帐户时,我正尝试向自己发送一封电子邮件。这是我正在部署到 Firebase Functions 的当前代码:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const nodemailer = require("nodemailer");

admin.initializeApp();

require("dotenv").config();

const 
    SENDER_EMAIL,
    SENDER_PASSWORD
 = process.env;

exports.sendEmailNotification = functions.firestore.document("users/userId").onCreate(async (snapshot, context) => 
    const data = snapshot.data();

    // create reusable transporter object using the default SMTP transport
    let transporter = nodemailer.createTransport(
        host: "smtp.gmail.com",
        port: 465,
        secure: true,
        auth: 
            user: SENDER_EMAIL,
            pass: SENDER_PASSWORD,
        ,
    );

    // send mail with defined transport object
    let info = await transporter.sendMail(
        from: `"MY_APP_NAME" <$SENDER_EMAIL>`,
        to: "MY_PERSONAL_GMAIL_ACCOUNT",
        subject: `A New User Has Joined MY_APP_NAME!`,
        text: `A new user has joined MY_APP_NAME. Name: $data.name, email: $data.email`
    );
)

使用node index.js 命令在我的机器上运行类似的版本没有问题。问题似乎出在它在 Firebase Functions 上运行时。

【问题讨论】:

【参考方案1】:

根据您当前的代码,它似乎工作正常,正如您所说,它只能在使用 node.js 的机器上正常工作。 获得相同结果的指南可能是 Nodemailer 作为Node.js 的模块。

现在,如果您想使用 Cloud Functions for Firebase 执行此操作,我强烈建议您遵循 Send Email Using Firebase Functions & Nodemailer 指南。

Send Email with Firebase functions and Nodemailer 的附加指南。

【讨论】:

以上是关于与 Firebase 函数一起使用时,Nodemailer 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 无法将 MethodChannel 与 Firebase onBackgroundMessage 一起使用

当我尝试将 Analytics 与通知一起使用时,Firebase 中没有静态方法 zzUr()

我可以将 SafetyNet 与 firebase 功能一起使用吗?

AccessControlException:将 Firebase 与 GoogleAppEngine 一起使用时访问被拒绝(“java.lang.RuntimePermission”“modifyT

如何将 Firebase 与 Spring Boot REST 应用程序一起使用?

如何将 firebase 的 firestore/admin sdk 与 next.js 一起使用