首页 > 解决方案 > 在 React Native 中使用 Firebase Cloud Functions 发送电子邮件

问题描述

我想使用 Firebase Cloud Functions 在我的 React Native 中发送电子邮件。用户应该能够发送电子邮件以在应用程序中报告问题/反馈。我在我的本机应用程序中创建了一个文本输入和一个按钮。用户应该能够在文本输入框中指定他们的问题/反馈,当他们按下按钮时,我将在我的 gmail 或 hotmail 帐户中以电子邮件的形式收到他们的回复。我可以在 Firebase Cloud Functions 中使用 onCreate 来实现这一点吗?如果是这样,我该如何实现?onCreate 方法和 react native 中的按钮功能会是什么样子?我对本机和火力云功能做出反应非常新。不幸的是,我还没有看到任何关于此的链接。

谢谢你。

请看下面:

const nodemailer = require('nodemailer');
const email = functions.config().email_credentials.email;
const password = functions.config().email_credentials.password;
const mailTransport = nodemailer.createTransport(`smtps://${email}:${password}@smtp.gmail.com`);

functions.database.ref('/feedbacks/{currentId}').onCreate((snapshot, context) => {
      const feedback = snapshot.val().feedback;
      const name = snapshot.val().name;
      
      const mailOptions = {
        from: snapshot.val().email,
        replyTo: snapshot.val().email,
        to: functions.config().email_credentials.email,
        subject: `Feedback from `+name,
        html: feedback,
      };
      
          try {
               mailTransport.sendMail(mailOptions);
          } catch(error) {
              console.log(error);
          }
      
      return null;
      
  });

实时数据库:

在此处输入图像描述

标签: firebasereact-nativegoogle-cloud-functions

解决方案


您的云功能可能如下所示:

import * as functions from "firebase-functions";
import admin from "firebase-admin";
import nodemailer from "nodemailer";
const { email, password } = functions.config().gmail;
const mailTransport = nodemailer.createTransport(
  `smtps://${email}:${password}@smtp.gmail.com`
);

export default functions.database
  .ref("/feedbacks/{uid}")
  .onCreate(async (eventSnapshot, context) => {
    const data = eventSnapshot.val();
    const { feedback } = data;

      const mailOptions = {
        from: functions.config().email_credentials.email,
        replyTo: functions.config().email_credentials.email,
        to: snapshot.val().email,
        subject: `Feedback from `+name,
        html: feedback,
      };

    await mailTransport.sendMail(mailOptions);
    return null;
  });

确保将您的电子邮件凭据保存在 firebase 云函数配置下,而不是代码中。如果你把它放在代码中的任何地方,它可能会在一段时间内被某人阅读。这是非常重要的。

在您的 Gmail 中确保启用“Unsercure 应用程序”。更多关于它的信息

现在,如果有人将一些数据添加到路径feeds和电子邮件将被发送。

不要忘记使用配置来部署您的功能。


推荐阅读