Reactjs Firebase数据库获取新数据时发送电子邮件

Reactjs Firebase数据库获取新数据时发送电子邮件,reactjs,firebase,firebase-realtime-database,google-cloud-functions,Reactjs,Firebase,Firebase Realtime Database,Google Cloud Functions,我不熟悉Firebase的NodeJS和云功能,我的网站(内置ReactJS)连接到Firebase实时数据库-当客户订购产品时,他在html输入中写入的所有数据都存储在我的Firebase数据库中 现在我想自动发送包含该数据的电子邮件 发件人:test@mail.com 主题:给你的新订单 姓名:“布拉布拉” 产品:“Blaa” 你明白了 我想Firebase的云功能就是答案,有人能帮我吗?我应该在functions/index.js中实现什么代码 编辑:这是我数据库中的JSON数据: {

我不熟悉Firebase的NodeJS和云功能,我的网站(内置ReactJS)连接到Firebase实时数据库-当客户订购产品时,他在html输入中写入的所有数据都存储在我的Firebase数据库中

现在我想自动发送包含该数据的电子邮件

发件人:test@mail.com 主题:给你的新订单

姓名:“布拉布拉” 产品:“Blaa”

你明白了

我想Firebase的云功能就是答案,有人能帮我吗?我应该在functions/index.js中实现什么代码

编辑:这是我数据库中的JSON数据:

{
  "Email_Message" : {
    "-LOOFLA-OFkKY_6Ut03b" : {
      "email" : "",
      "message" : "",
      "name" : ""
    }
  }
}

请查看“Firebase示例库的云函数”中的官方示例:

在此示例中,每次在
/users
主节点下写入(和修改)新节点时,都会触发云功能。您应该根据自己的数据结构调整此路径

还要注意,示例中使用的事件处理程序是
onWrite()
,“在实时数据库中创建、更新或删除数据时触发”。如果您希望仅在创建订单时触发电子邮件发送,可以使用
onCreate()
处理程序,请参阅文档:


根据您对数据库结构的更新进行更新。

根据您的结构,您应该调整云函数示例代码,如下所示:

'use strict';

const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
// Configure the email transport using the default SMTP transport and a GMail account.
// For other types of transports such as Sendgrid see https://nodemailer.com/transports/
// TODO: Configure the `gmail.email` and `gmail.password` Google Cloud environment variables.
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: gmailEmail,
    pass: gmailPassword,
  },
});

exports.sendEmailConfirmation = functions.database.ref('/Email_Message/{mailId}').onWrite(async (change) => {
  const snapshot = change.after;
  const val = snapshot.val();

  const mailOptions = {
    from: '"......" <youremail@xxxxxxxxx.com>',
    to: val.email,
  };

  // Building Email message.
  mailOptions.subject = 'Dear ' + val.name;  //for example
  mailOptions.text = val.message;

  try {
    await mailTransport.sendMail(mailOptions);
    console.log('email sent to:', val.email);
  } catch(error) {
    console.error('There was an error while sending the email:', error);
  }
  return null;
});
“严格使用”;
const functions=require('firebase-functions');
const nodemailer=require('nodemailer');
//使用默认SMTP传输和GMail帐户配置电子邮件传输。
//有关其他类型的传输,如Sendgrid,请参阅https://nodemailer.com/transports/
//TODO:配置`gmail.email`和`gmail.password`谷歌云环境变量。
const gmailEmail=functions.config().gmail.email;
const gmailPassword=functions.config().gmail.password;
const mailTransport=nodemailer.createTransport({
服务:“gmail”,
认证:{
用户:Gmail,
密码:gmailPassword,
},
});
exports.sendmailconfirmation=functions.database.ref('/Email\u Message/{mailId}').onWrite(异步(更改)=>{
const snapshot=change.after;
const val=snapshot.val();
常量邮件选项={
发件人:“…”,
致:val.email,
};
//构建电子邮件消息。
mailpoptions.subject='Dear'+val.name;//例如
mailpoptions.text=val.message;
试一试{
等待mailTransport.sendMail(mailpoptions);
console.log('电子邮件发送到:',val.email);
}捕获(错误){
console.error('发送电子邮件时出错:',错误);
}
返回null;
});

您能更具体一点吗?我已经尝试过实现这个示例,但正如我所说,我对nodeJs和firebase cloud functionsHow还不熟悉,您希望我更具体一点吗??;-)示例代码相当简单,您只需要将其调整为适合您的数据库结构。如果用数据库结构更新问题,我可以指出如何修改“触发路径”。如果您在项目设置和云功能部署方面遇到困难,我建议您查看以下代码实验室:这是指向我的数据库Email的路径,Message is object有3个字符串:name、Email、,你能给我一些关于如何在你提到的示例代码中实现它的建议吗?我需要的是数据库的结构(不是路径)。您可以打开Firebase控制台,然后转到数据库部分,选择实时数据库,单击右上角有3个垂直点的按钮并选择“导出JSON”。将JSON(或其中有意义的部分)添加到原始问题中。Thxpost编辑:)thx for Patience如果您是JavaScript新手,Firebase的云函数并不是学习它的最佳方式。我建议您先阅读和/或参加考试。它们涵盖了许多基本的JavaScript、Web和Firebase交互。您还可以在local Node.js进程中使用Admin SDK,该进程可以使用本地调试器进行调试。在这些之后,您将更好地为云函数编写代码。