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
相关产品推荐
相关产品推荐

