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

