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

基于Flutter实现Strapi新增条目时发送邮件通知方案问询

两种实现方案详解

方案一:Flutter接收通知 + 后端发送邮件(满足你需要Flutter参与通知的需求)

步骤1:实现用户订阅流程

  • 在Strapi后台创建subscribers集合,添加email(必填)、device_token(可选,用于推送通知)两个字段
  • Flutter端用户点击「接收邮件通知」后,调用Strapi的POST /api/subscribers接口,提交用户邮箱和设备的推送令牌(如FCM令牌)

步骤2:Strapi配置Webhook触发通知

  • 进入Strapi后台「设置」→「Webhooks」,新建Webhook
  • 触发事件选择email.create(当email集合新增条目时触发)
  • 目标URL填写你的后端服务接口(比如https://your-backend.com/trigger-email)—— 因为Flutter客户端是动态设备,无法作为固定接收端点,必须通过后端中转

步骤3:后端处理通知与邮件发送

  • 后端收到Strapi的Webhook请求后,提取新email条目的内容(比如图片URL、标题等)
  • 调用Strapi的GET /api/subscribers接口获取所有订阅用户的邮箱列表
  • 调用第三方邮件服务(如SendGrid、Mailgun)的API批量发送邮件,同时调用FCM/APN接口给订阅的Flutter设备推送通知

步骤4:Flutter端接收通知

  • 集成FCM/APN推送SDK,接收后端发来的通知并展示给用户

方案二:Strapi全流程处理(无需改动Flutter)

这种方案更省心,所有逻辑都在Strapi内部完成,Flutter只需要保留提交订阅邮箱的接口调用即可。

步骤1:准备Strapi环境

  1. 创建订阅用户集合:在Strapi后台新建subscribers集合,仅需email字段
  2. 安装并配置邮件插件:
    • 执行命令安装插件:npm install @strapi/plugin-email(或yarn)
    • 在config/plugins.js中配置邮件服务(以SendGrid为例):
      module.exports = {
        email: {
          config: {
            provider: 'sendgrid',
            providerOptions: {
              apiKey: process.env.SENDGRID_API_KEY, // 从环境变量读取密钥
            },
            settings: {
              defaultFrom: 'your-notify-email@example.com',
              defaultReplyTo: 'your-notify-email@example.com',
            },
          },
        },
      };
      
    • 在Strapi后台「设置」→「邮件插件」中测试配置是否正常

步骤2:添加生命周期钩子自动发邮件

在Strapi项目的src/api/email/content-types/email/lifecycles.js文件中添加以下代码,当email集合新增条目时自动给所有订阅用户发邮件:

module.exports = {
  async afterCreate(event) {
    const { result } = event;
    // 获取所有订阅用户的邮箱
    const subscribers = await strapi.entityService.findMany('api::subscriber.subscriber', {
      fields: ['email'],
    });
    // 批量发送邮件(用户量大建议用队列异步处理)
    for (const subscriber of subscribers) {
      await strapi.plugins['email'].services.email.send({
        to: subscriber.email,
        from: 'your-notify-email@example.com',
        subject: '新图片内容更新',
        html: `<h3>新增了一张图片</h3><img src="${result.image.url}" style="max-width: 600px;" alt="新图片">`,
      });
    }
  },
};

注意:如果你的email集合中图片字段不是image,要替换成实际字段名;用户量较大时,建议集成BullMQ等队列工具异步处理邮件发送,避免阻塞Strapi请求。

步骤3:Flutter端仅需保留订阅逻辑

Flutter端用户点击订阅后,调用Strapi的POST /api/subscribers接口提交邮箱即可,后续所有通知流程都由Strapi自动完成。


通用注意事项

  • 邮件服务优先选择第三方服务商(SendGrid、Mailgun),比自建SMTP更稳定,降低邮件被标记为垃圾邮件的概率
  • 配置Strapi接口权限时,确保subscribers集合的POST接口仅对未登录用户开放(如果不需要用户认证),email集合的GET接口保持原有权限供Flutter获取图片
  • 批量发送邮件时,务必遵守邮件服务商的发送频率限制,避免被封号

内容的提问来源于stack exchange,提问作者lemon-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:42:44