Prompt
How to send receipt and invoice emails from your SaaS
Latest observation
Sending receipt and invoice emails from your SaaS is all about combining transactional email APIs with dynamic templates that pull in billing data securely. Unlike newsletters, these are legally important communications, so they must be accurate, branded, and compliant.
🔑 Core Workflow
Trigger on payment events
Hook into your payment processor (Stripe, Razorpay, PayPal).
Use webhooks (checkout.session.completed, invoice.payment_succeeded) to trigger email sending.
Generate invoice data
Pull line items, taxes, discounts, and totals from your billing system.
Format as JSON payload for your email API.
Use transactional email API
-
Providers: Resend, Postmark, SendGrid, Mailgun.
-
Send via HTTPS POST with fields: to, from, subject, html, attachments.
Attach PDF invoice
Generate PDF using libraries like pdfkit, react-pdf, or Stripe’s built-in invoice PDF.
Attach to email payload.
Design branded templates
Use React Email or MJML for consistent design.
Include company logo, billing details, and support contact.
📩 Example (Node.js + Resend)
js
import { Resend } from "resend";
const resend = new Resend(process.env.RESEND_API_KEY);
export async function sendReceiptEmail(userEmail, invoiceData, pdfBuffer) {
await resend.emails.send({
- from: "billing@yourdomain.com",
- to: userEmail,
- subject:
Receipt for ${invoiceData.plan}, - html: `<h1>Thanks for your payment</h1>
- <p>Amount: ${invoiceData.amount}</p>
- <p>Date: ${invoiceData.date}</p>`,
- attachments: [
{
- filename: "invoice.pdf",
- content: pdfBuffer.toString("base64"),
},
],
});
}
⚠️ Compliance & Best Practices
Include legal details → company name, address, GST/VAT ID.
Keep receipts simple → amount, date, payment method.
Invoices must be itemized → line items, taxes, discounts.
Retention → store copies in your database for audits.
Deliverability → configure SPF/DKIM/DMARC for your domain.
✅ Recommended Flow
User pays via Stripe/Razorpay.
Webhook triggers Edge Function / Serverless handler.
Function generates invoice PDF + email HTML.
Transactional email API sends receipt/invoice email.
Logs stored for compliance.