无法使用 firebase 云功能发送电子邮件

创建 Firestore 文档后无法发送电子邮件。创建 firestore 上的文档后,我正在尝试向 webapp 管理员的电子邮件发送通知电子邮件。但是面临以下问题。


索引.js


const functions = require('firebase-functions');

const admin = require("firebase-admin")

const nodemailer = require('nodemailer');


admin.initializeApp()



//google account credentials used to send email

var transporter = nodemailer.createTransport({

    host: 'smtp.gmail.com',

    port: 465,

    secure: true,

    auth: {

        user: '*****@gmail.com',

        pass: '******'

    }

});



exports.sendEmail = functions.firestore

    .document('stories/{sId}')

    .onCreate((snap, context) => {


        const mailOptions = {

            from: `*******@gmail.com`,

            to: snap.data().email,

            subject: 'contact form message',

            html: `<h1>Order Confirmation</h1>

                                <p>

                                   <b>Email: </b>${snap.data().email}<br>

                                </p>`

        };



        return transporter.sendMail(mailOptions, (error, data) => {

            if (error) {

                return res.send(error.toString());

            }

            var data = JSON.stringify(data)

            return res.send(`Sent! ${data}`);

        });

    

    });    


Firebase 函数日志


*未配置发送电子邮件计费帐户。外部网络无法访问且配额受到严格限制。配置计费帐户以删除这些限制


sendEmail 函数返回未定义的、预期的 Promise 或值*


我假设忽略日志中的计费消息是安全的,因为计费计划不是强制性的?


任何帮助将非常感激。


慕妹3242003
浏览 80回答 1
1回答

拉丁的传说

错误消息告诉您,您的代码返回了所需的承诺或值以外的内容。问题在于您使用transporter.sendMail().&nbsp;根据nodemailer 文档,如果你不传递回调方法(你正在sendMail做的),只会返回一个承诺,否则它会返回未定义。所以你的函数返回未定义。你应该做什么而不是删除回调参数,而是处理返回的承诺的结果。您还可以从函数返回承诺。&nbsp; return transporter.sendMail(mailOptions)&nbsp; &nbsp; .then(data => {&nbsp; &nbsp; &nbsp; &nbsp; // decide what you want to do on success&nbsp; &nbsp; })&nbsp; &nbsp; .catch(err => {&nbsp; &nbsp; &nbsp; &nbsp; // decide what you want to do on failure&nbsp; &nbsp; });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript