Short answer
Stripe can email your customers a receipt after each successful payment, invoices, a notice after each failed subscription payment, reminders before a trial ends, a renewal or a card expires, and a link to confirm a payment that needs 3D Secure. Each one is a switch in your Stripe settings. By default they come from stripe.com, and you can move them to your own domain by adding DNS records.
What you can change is mostly branding: logo, colors and business details. When you want your own words, a series instead of one email, or an email for a moment Stripe doesn't cover (an abandoned checkout, a first payment that fails, a cancelled subscription), turn off Stripe's email for that moment and send your own from the matching Stripe event, either with your own webhook code or with an integration that does it for you.
Every customer email Stripe can send
None of these send unless you turn them on. Receipts live under Settings → Business → Customer emails; the subscription emails live in Stripe's subscription and revenue recovery email settings.
| When Stripe sends it | Setting | |
|---|---|---|
| Receipt | After a successful payment or a refund. Nothing is sent when a payment fails. | Customer emails → Successful payments, Refunds |
| Invoice | When an invoice is finalized for a customer you bill by invoice, plus reminders if a recurring invoice isn't paid | Billing settings → invoices sent to customers |
| Failed payment | After each failed card payment on a subscription, with a link to update the card | Revenue recovery → Send emails when card payments fail |
| Payment confirmation | When a payment needs the customer to act, for example a 3D Secure check, with optional reminders | Send a Stripe-hosted link for customers to confirm their payments when required |
| Trial ending | 7 days before a free trial ends | Send a reminder email 7 days before a free trial ends |
| Upcoming renewal | Before a subscription renews, on the schedule you set (automatic charges only) | Send emails about upcoming renewals |
| Expiring card | 1 month before the customer's default card expires | Send emails about expiring cards |
From Stripe's receipts and automated customer emails docs.
Last checked on each vendor's public page.
The failed payment, trial, renewal and expiring card emails link to a Stripe-hosted page (or your own billing page) where the customer can update their card and pay what's due. Stripe keeps a log of the emails it sent in the last 60 days on each customer's page.
Which address Stripe emails come from
Out of the box, Stripe sends invoices, receipts and failed payment notices from the stripe.com domain. Your customer sees a Stripe address on a bill for your product, which is one more reason they might not recognise it.
You can verify your own email domain in Stripe: add the domain under Customer emails, publish the TXT and CNAME records it gives you, and set a DMARC policy. After that Stripe sends from addresses on your domain such as receipts@, invoice@, failed-payments@, trial-ending@, card-expiring@ and upcoming-invoice@. Replies go to the support address in your public business details.
What you can change in Stripe's emails
- Branding: your logo or icon, brand color and accent color, set under Settings → Business → Branding. Every Stripe email and hosted page uses them.
- Business details: your public business name, support email, support address and privacy policy link. Some of these are required on receipts.
- Language: taken from the customer's preferred locale, or the default language in Customer emails.
- Where the button goes: the subscription emails can link to Stripe's hosted page or your own billing page.
- Which emails send: each one is its own switch.
What you don't get is your own template. The layout, subject and most of the wording are Stripe's, and you get one email per moment: one notice per failed attempt, one trial reminder 7 days out. For many products that's enough. When it isn't, send your own.
When to send your own billing emails
| You want | Stripe event to send from | Guide |
|---|---|---|
| A receipt in your own template, with your product's wording | invoice.paid | Stripe receipt emails |
| Two or three failed payment emails that stop when the customer pays | invoice.payment_failed, stop on invoice.paid | Stripe failed payment emails |
| An email when a first or one-off payment fails | payment_intent.payment_failed | Stripe failed payment emails |
| A trial reminder at a different time, or with usage in it | customer.subscription.trial_will_end | Send emails from Stripe webhooks |
| An abandoned checkout email | checkout.session.expired | Send emails from Stripe webhooks |
| A note after someone cancels | customer.subscription.deleted | Send emails from Stripe webhooks |
Two of those Stripe doesn't email at all. Abandoned checkouts: Stripe gives you a recovery link on the checkout.session.expired event when you turn recovery on, and leaves the email to you (Stripe's guide). First payments that fail: a card declined at checkout, or a 3D Secure check the bank doesn't approve, fails on the payment before any invoice exists, so emails that run on invoices don't fire.
Two ways to send your own
With the Groundmail Stripe integration (no webhook code)
- 01Connect with StripeOpen Integrations → Stripe in the dashboard and click Connect with Stripe. Pick your Stripe account and approve read-only access to the Groundmail app. (Prefer not to install an app? Paste a restricted key instead.)
- 02Pick a starterAutomations → New → From Stripe has Payment failed, Payment didn't go through, Trial ending, Receipt, Checkout recovery and Win-back. Each opens as a draft in your own template, so nothing sends until you turn it on.
Stripe events start automations as stripe.<event>, for example stripe.invoice.payment_failed, keyed to the Stripe customer. Emails use fields like {{event.data.customer.name}}, {{event.data.invoice.amount}} and {{event.data.invoice.url}}, and go out from your verified domain. Billing notices go on the transactional stream; win-back and checkout recovery go on the product stream, so a marketing-style email never shares IPs with a payment notice. The full list of fields is in the Stripe integration docs.
With your own webhook endpoint
Add an endpoint in Stripe, verify each event's signature, and call your email API. The core of it:
if (event.type === "invoice.paid") {
const invoice = event.data.object;
if (invoice.amount_paid > 0 && invoice.customer_email) {
await fetch("https://api.groundmail.dev/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GROUNDMAIL_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": `stripe:${event.id}`,
},
body: JSON.stringify({
from: "Example Billing <billing@mail.example.com>",
to: invoice.customer_email,
subject: `Receipt for invoice ${invoice.number}`,
html: `<p>Thanks, we received your payment.</p>
<p><a href="${invoice.hosted_invoice_url}">View invoice</a> · <a href="${invoice.invoice_pdf}">Download PDF</a></p>`,
}),
});
}
}The full handler, with signature checks, duplicate events and a mapping of events to emails, is in Send emails from Stripe webhooks.
Make billing emails arrive
- Send from your own authenticated domain, with SPF, DKIM and DMARC passing. A bill from an address the customer doesn't recognise is easy to ignore or report.
- Keep billing notices away from marketing mail. A failed payment email that shares a reputation with newsletters can land in spam on the day it matters. See what transactional email is.
- One clear button. Link to the hosted invoice page or your billing page, on a domain the customer can recognise.
- Plain words. Say what happened, what the customer should do, and by when.
Frequently asked questions
Does Stripe send emails to customers automatically?
Only the ones you turn on. Receipts, failed payment notices, trial, renewal and expiring card reminders and payment confirmation links are each a setting in your Stripe dashboard.
Can I customize Stripe's email templates?
You can set your logo, colors, business details and language, and choose where the buttons link. The layout and wording are Stripe's. To use your own template, turn off Stripe's email for that moment and send your own from the matching event.
Can Stripe emails come from my own domain?
Yes. Verify a custom email domain in Stripe's Customer emails settings by adding the TXT and CNAME records it gives you and a DMARC policy. Until then they come from stripe.com.
Does Stripe send abandoned cart emails?
No. With after_expiration.recovery.enabled set on the Checkout Session, Stripe puts a recovery URL on the checkout.session.expired event, and you email it yourself. Stripe's guide says customers must agree to promotional email first.
Will customers get two emails if I send my own?
Only if you leave Stripe's email for the same moment on. Turn off Successful payments for receipts, and Send emails when card payments fail for failed payments.
Sources
Facts on this page about other companies' products, prices and policies come from these public pages. They change, so check them before you decide.