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

如何将POST请求提供的用户邮箱用于Strapi发送订单确认邮件?

实现将订单摘要发送至用户提交的邮箱

核心思路

在Strapi的订单接口控制器中,提取前端POST请求里携带的用户邮箱,将其作为收件人地址调用邮件服务,同时根据订单数据生成对应的摘要内容。

具体实现步骤

1. 定位并修改Strapi订单控制器

打开Strapi项目中订单接口的控制器文件,路径一般为 ./src/api/orders/controllers/orders.js,修改其中的create方法(该方法对应前端POST /api/orders的请求逻辑)。

2. 编写控制器代码

// ./src/api/orders/controllers/orders.js
module.exports = {
  async create(ctx) {
    // 从请求体中提取前端传入的订单数据
    const { email, phone, items } = ctx.request.body.data;

    // 将订单数据保存到数据库(根据业务需求可选)
    const order = await strapi.service('api::order.order').create({
      data: {
        email,
        phone,
        items,
      },
    });

    // 构造订单摘要文本(可根据实际商品字段调整内容)
    const orderSummary = `
      您好!感谢您的下单。
      ---订单详情---
      ${items.map(item => `- ${item.name || '商品'} x ${item.quantity || 1} 单价:${item.price || 0}`).join('\n')}
      联系电话:${phone}
      订单ID:${order.id}
    `;

    // 调用Strapi邮件服务发送订单确认邮件
    try {
      await strapi.plugins['email'].services.email.send({
        to: email, // 直接使用用户提交的邮箱作为收件人
        from: '你的已验证邮箱地址', // 替换为你在邮件服务商处验证的邮箱(如SendGrid的发件邮箱)
        subject: '您的订单已确认',
        text: orderSummary,
        // 若需要HTML格式邮件,可添加以下字段
        // html: `<div><h3>您好!感谢您的下单</h3><p><strong>订单详情:</strong></p><ul>${items.map(item => `<li>${item.name || '商品'} x ${item.quantity || 1} 单价:${item.price || 0}</li>`).join('')}</ul><p>联系电话:${phone}</p><p>订单ID:${order.id}</p></div>`
      });
    } catch (error) {
      // 记录邮件发送失败日志,不影响订单创建(可根据业务需求调整逻辑)
      strapi.log.error('订单邮件发送失败:', error.message);
    }

    // 将创建好的订单数据返回给前端
    ctx.body = order;
  },
};

3. 确认前置条件

  • 已在Strapi中配置好邮件插件(如SendGrid、Mailgun等),确保from字段的邮箱已通过服务商验证
  • 前端请求已正确传递email、phone、items字段(你的Cart.js代码已满足该要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:50:34