为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3242003 2022-12-18 16:33:19
创建 Firestore 文档后无法发送电子邮件。创建 firestore 上的文档后,我正在尝试向 webapp 管理员的电子邮件发送通知电子邮件。但是面临以下问题。索引.jsconst functions = require('firebase-functions');const admin = require("firebase-admin")const nodemailer = require('nodemailer');admin.initializeApp()//google account credentials used to send emailvar 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 或值*我假设忽略日志中的计费消息是安全的,因为计费计划不是强制性的?任何帮助将非常感激。
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

错误消息告诉您,您的代码返回了所需的承诺或值以外的内容。问题在于您使用transporter.sendMail(). 根据nodemailer 文档,如果你传递回调方法(你正在sendMail做的),只会返回一个承诺,否则它会返回未定义。所以你的函数返回未定义。

你应该做什么而不是删除回调参数,而是处理返回的承诺的结果。您还可以从函数返回承诺。

  return transporter.sendMail(mailOptions)

    .then(data => {

        // decide what you want to do on success

    })

    .catch(err => {

        // decide what you want to do on failure

    });


查看完整回答
反对 回复 2022-12-18
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信