Stripe订阅支付成功后未向用户发送邮件收据问题咨询
Stripe订阅支付成功后不发送邮件收据的解决方法
核心排查点
- 环境配置隔离问题:Stripe测试环境、生产环境的邮件发送配置完全独立,生产视图下开启的邮件权限不会同步到测试环境。你需要切到测试模式视图,在客户邮件配置页单独打开测试环境的「支付成功自动发送收据」开关即可触发测试环境发信,不存在测试模式完全不能自动发送邮件的限制。
- 配置项遗漏检查:进入账单设置页,确认「成功支付后向客户发送收据」「订阅首次支付成功发送确认邮件」两个开关均处于开启状态,不要只开启通用邮件权限。


代码补全方案
你当前的代码没有显式声明发票、收据的发送规则,可补充对应配置做兜底,避免默认配置不生效的问题:
const price = await stripe.prices.retrieve('priceId') const customer = await stripe.customers.create({ email: user.email, name: `${user.firstname} ${user.surname}`, }) const subscription = await stripe.subscriptions.create({ customer: customer.id, items: [ { price: price.id, quantity, }, ], payment_behavior: 'default_incomplete', payment_settings: { save_default_payment_method: 'on_subscription' }, // 显式指定自动扣费模式下自动发送发票收据 collection_method: 'charge_automatically', expand: ['latest_invoice.payment_intent'], }) // 支付成功回调中可加兜底触发逻辑,确保收据发出 // 注意:需要监听invoice.paid事件触发时执行,不要在创建订阅后立即调用 // await stripe.invoices.sendInvoice(invoiceId)
验证步骤
- 配置完成后发起一笔测试支付,支付完成后去Stripe后台事件日志页查找
invoice.paid事件,查看事件返回值中receipt_sent字段是否为true,为false说明配置仍未生效。 - 若日志显示已发送但客户未收到邮件,检查客户邮箱的垃圾邮件文件夹,确认Stripe官方发件地址未被邮箱服务商拦截。
- 生产环境下只要配置正确,不需要手动调用发件接口,Stripe会自动完成收据推送;测试环境如果自动发件不生效,可通过上面的
sendInvoice接口手动触发。
内容的提问来源于stack exchange,提问作者beginnersLuck.css
相关产品推荐
相关产品推荐

