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

Directus 9 Webhooks实现mission表新增记录时发送个性化邮件的POC实施指导及项目配置验证

实现新增Mission记录触发邮件的Webhooks POC步骤

首先得理清Directus Webhooks的核心逻辑:当指定集合(比如你的mission)发生特定事件(比如新增记录)时,Directus会向你配置的目标URL发送一个HTTP请求,你需要在这个目标URL对应的服务里处理请求,调用nodemailer发送个性化邮件。具体操作分三步:

1. 在Directus后台配置Webhook

  • 进入Directus管理后台,导航到 Settings → Webhooks,点击「Create Webhook」
  • 填写基础信息:
    • Name:自定义名称(比如「Mission新增触发邮件」)
    • Status:设为「Active」
    • Trigger:选择「Collections」→ 找到你的mission集合 → 只勾选「Create」事件(只需要新增时触发)
    • URL:填写你后续要搭建的邮件服务接口地址(比如本地测试可以用http://localhost:3000/send-mission-email,如果Directus在容器里,要换成宿主机IP或者host.docker.internal)
    • Method:选择POST
    • Payload:选「Full Item」(这样能拿到新增记录的完整数据,方便提取收件人信息)
  • 保存配置,Webhook就创建好了。

2. 搭建接收Webhook的邮件服务

因为你项目里已经安装了nodemailer,推荐直接用Directus的自定义端点扩展来实现,这样更整合:

  • 在项目根目录创建extensions/endpoints/send-mission-email/index.js,内容如下:
const nodemailer = require('nodemailer');

module.exports = function registerEndpoint(router) {
  router.post('/send-mission-email', async (req, res) => {
    try {
      // 从Webhook请求中获取新增的mission数据
      const newMission = req.body;
      
      // 配置邮件发送器(替换成你自己的邮箱SMTP信息)
      const transporter = nodemailer.createTransport({
        host: 'smtp.your-email-provider.com',
        port: 587,
        secure: false,
        auth: {
          user: 'your-account@example.com',
          pass: 'your-email-password-or-app-code',
        },
      });

      // 假设你的mission集合里有`recipient_email`字段存储收件人邮箱
      const recipientEmail = newMission.recipient_email;
      
      // 发送个性化邮件
      const sendResult = await transporter.sendMail({
        from: '"你的应用名称" <your-account@example.com>',
        to: recipientEmail,
        subject: `新任务已创建:${newMission.title}`,
        text: `你有一条新任务:${newMission.title}\n详情:${newMission.description}`,
        html: `<h3>新任务已创建:${newMission.title}</h3><p>详情:${newMission.description}</p>`,
      });

      console.log('邮件发送成功:', sendResult.messageId);
      res.status(200).json({ success: true, msg: '邮件已发送' });
    } catch (err) {
      console.error('邮件发送失败:', err);
      res.status(500).json({ success: false, err: err.message });
    }
  });
};
  • 重启Directus服务,这个自定义端点就可以通过http://your-directus-url:8055/send-mission-email访问了。

3. 测试验证

  • 在Directus的mission集合里新增一条带收件人邮箱的记录
  • 回到Webhooks页面,查看「Logs」标签,确认请求是否成功发送
  • 检查收件人邮箱是否收到邮件

架构合理性确认

你提到了应用架构截图,但这里没有附上,没法直接针对性评估。不过可以给你几个通用的检查方向:

  • 如果你是用Directus作为后端数据管理+API层,搭配前端应用的模式,这个架构是非常合理的,Directus能帮你省掉大量CRUD和权限管理的重复工作
  • 邮件服务如果是小型项目,整合在Directus扩展里没问题;如果后续邮件量较大,建议单独部署邮件服务或者用第三方邮件服务(比如SendGrid),避免影响Directus的核心性能
  • Nginx反向代理要确保配置正确,比如处理好CORS、WebSocket(如果用到实时功能)的转发规则

当前配置检查与遗漏步骤

1. package.json配置检查

  • Directus版本是^9.0.0-rc.91,这是候选版本,强烈建议升级到稳定版(比如9.26.x),RC版本可能存在未修复的bug,会影响Webhooks等功能的稳定性
  • 依赖里的mysql和nodemailer都没问题,mysql是Directus的数据库驱动,nodemailer用于邮件发送

2. 可能遗漏的步骤

  • 升级Directus到稳定版:运行npm update directus即可,避免RC版本的兼容性问题
  • 确认环境变量配置:检查项目根目录的.env文件,确保DB_HOST、DB_USER等数据库连接信息正确;如果自定义扩展路径不是默认的./extensions,要设置EXTENSIONS_PATH环境变量
  • 邮箱SMTP权限配置:比如QQ邮箱需要开启SMTP服务并获取授权码,Gmail需要启用App Password(如果开启了两步验证),否则会出现邮件发送失败的情况
  • Webhook目标URL可达性:如果Directus部署在容器里,不能用localhost作为目标URL,要换成宿主机IP或者host.docker.internal(Docker环境);如果是远程服务器,要确保端口开放,或者用ngrok暴露本地服务进行测试

内容的提问来源于stack exchange,提问作者uss-code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:44:05