You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在表单提交至Firebase实时数据库时发送邮件通知

静态表单提交Firebase实时数据库+邮件通知实现指南

嘿,作为Firebase和JavaScript新手,这个需求其实完全能落地!我一步步拆解,尽量用简单易懂的代码和说明,让你能跟着操作:

第一步:配置Firebase项目与实时数据库

首先去Firebase控制台创建一个新项目,开启实时数据库。测试阶段可以先把数据库规则设为开放(方便调试,上线后一定要改安全规则):

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

然后获取Web应用的配置代码,在你的静态页面里引入Firebase SDK(从控制台复制官方的引入代码就行),再初始化Firebase:

// 替换成你自己的Firebase配置
const firebaseConfig = {
  apiKey: "你的apiKey",
  authDomain: "你的authDomain",
  databaseURL: "你的databaseURL",
  projectId: "你的projectId",
  storageBucket: "你的storageBucket",
  messagingSenderId: "你的messagingSenderId",
  appId: "你的appId"
};

// 初始化Firebase应用和数据库
firebase.initializeApp(firebaseConfig);
const db = firebase.database();

第二步:处理表单提交到数据库

先写一个简单的HTML表单:

<form id="contactForm">
  <input type="text" id="username" placeholder="你的姓名" required>
  <input type="email" id="userEmail" placeholder="你的邮箱" required>
  <textarea id="userMessage" placeholder="留言内容" required></textarea>
  <button type="submit">提交表单</button>
</form>

然后写JavaScript监听表单提交事件,把数据存到数据库:

// 获取表单元素
const form = document.getElementById('contactForm');

// 监听提交事件
form.addEventListener('submit', (e) => {
  e.preventDefault(); // 阻止页面默认跳转

  // 收集表单数据
  const formData = {
    name: document.getElementById('username').value,
    email: document.getElementById('userEmail').value,
    message: document.getElementById('userMessage').value,
    submitTime: firebase.database.ServerValue.TIMESTAMP // 用服务器时间记录提交时间
  };

  // 把数据推送到数据库的submissions节点下(自动生成唯一ID)
  db.ref('submissions').push(formData)
    .then(() => {
      alert('提交成功!');
      form.reset(); // 重置表单
    })
    .catch((err) => {
      alert(`提交失败:${err.message}`);
    });
});

第三步:实现邮件通知(核心步骤)

前端直接发邮件会暴露你的邮箱密码,非常不安全,所以推荐用Firebase Cloud Functions来处理邮件发送——这是官方推荐的安全方式,而且免费额度足够个人使用。

3.1 准备Cloud Functions环境

  1. 先安装Node.js和Firebase CLI(终端里运行npm install -g firebase-tools)
  2. 登录Firebase:firebase login
  3. 初始化Functions:firebase init functions,选择你的项目,用JavaScript作为开发语言

3.2 编写邮件发送函数

进入本地项目的functions文件夹,安装邮件依赖nodemailer:npm install nodemailer
然后修改index.js文件:

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

// 配置邮件发送器(这里以Gmail为例,要开启两步验证后用应用专用密码)
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: '你的发送邮箱@gmail.com',
    pass: '你的Gmail应用专用密码' // 不是普通登录密码!
  }
});

// 监听数据库submissions节点的新增数据事件
exports.sendSubmissionAlert = functions.database.ref('/submissions/{pushId}')
  .onCreate((snapshot, context) => {
    // 获取新提交的表单数据
    const newSubmission = snapshot.val();
    
    // 配置邮件内容
    const mailOptions = {
      from: '表单提交通知 <你的发送邮箱@gmail.com>',
      to: '你要接收通知的邮箱@xxx.com',
      subject: '收到新的表单提交啦!',
      html: `
        <h2>新提交详情</h2>
        <p>姓名:${newSubmission.name}</p>
        <p>邮箱:${newSubmission.email}</p>
        <p>留言:${newSubmission.message}</p>
        <p>提交时间:${new Date(newSubmission.submitTime).toLocaleString()}</p>
      `
    };

    // 发送邮件
    return transporter.sendMail(mailOptions)
      .then(() => console.log('邮件发送成功'))
      .catch((err) => console.error('邮件发送失败:', err));
  });

如果不用Gmail,换成Outlook或其他邮箱的话,修改service和auth配置即可(比如Outlook的service设为'outlook')。

3.3 部署Cloud Functions

终端里运行firebase deploy --only functions,部署完成后,只要数据库有新的表单提交,这个函数就会自动触发,给你发邮件通知!

新手必看注意事项

  • 数据库安全:上线前一定要修改测试用的开放规则,比如只允许认证用户提交,或者验证数据格式,防止恶意写入。
  • Functions免费额度:Firebase给Functions提供了免费额度,个人使用完全足够,超出后才会收费。
  • 前端验证:可以给表单加简单的前端验证(比如检查邮箱格式),避免无效数据提交到数据库。

内容的提问来源于stack exchange,提问作者Robert Bresnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:23:28