How to Send Emails From Bubble.io: Transactional Email Complete Guide
Three email options with their trade-offs, the four-step SendGrid production setup, the complete list of eight emails every SaaS must send, and the spam score test you must run before your first customer receives any email from your app.
Three Ways to Send Email From Your App
Sending email from a Bubble application — welcome emails, password resets, notifications, invoices, and weekly digests — requires choosing between Bubble’s built-in email system, the SendGrid API Connector, or another transactional email provider. Each has trade-offs in deliverability, customisation, and cost. This guide covers all three options and when to use each.
Choosing the Right Approach
| Option | Deliverability | Customisation | Cost | Best For |
|---|---|---|---|---|
| Bubble’s Built-in Email | Low — often lands in spam | Limited HTML templates | Free (included in plan) | Development and testing only; never for production |
| SendGrid API | High — with domain verification | Full HTML with dynamic templates | Free to 100/day; $20/mo for more | Production transactional email for most apps |
| Postmark | Very High — specialised for transactional | Full HTML templates | $15/mo for 10k emails | High-volume transactional email; excellent deliverability |
| Mailgun | High | Full HTML | Free tier; pay as you go | Cost-effective at high volume; good EU data residency |
The Production Email Pattern
Verify your sending domain in SendGrid
In SendGrid → Settings → Sender Authentication, add your domain (yourapp.com) and configure the DNS records (SPF, DKIM) your domain registrar requires. This is not optional — without domain verification, your emails will land in spam. Allow 24-48 hours for DNS propagation.
Connect SendGrid to Bubble via API Connector
In Bubble’s API Connector, add a new API called SendGrid. Base URL: https://api.sendgrid.com. Authentication: Key in header, key name ‘Authorization’, value ‘Bearer YOUR_SENDGRID_API_KEY’ (marked Private).
Create the send email API call
Add a POST call to /v3/mail/send. The body contains: from (your verified sender), to (recipient email and name), subject, and content (text or HTML). Mark all dynamic fields (to email, subject, content) as parameters so you can pass them from Bubble workflows.
Test deliverability before launch
Send a test email to a test account and check mail-tester.com (enter the test address, send the email, view the deliverability score). Aim for 9+/10. Common issues: missing SPF/DKIM records, no unsubscribe link in marketing emails, sending from a subdomain without its own DNS records.
The Complete Transactional Email List
1. Welcome email
: On workspace creation (immediate)
2. Email verification
: On signup if email confirm enabled
3. Password reset
: When reset requested
4. Invitation to join
: When Admin invites a new member
5. Payment receipt
: On invoice.payment_succeeded webhook
6. Payment failed
: On invoice.payment_failed webhook
7. Trial ending soon
: Scheduled 3 days before trial_ends_at
8. Subscription cancelled
: On customer.subscription.deleted webhook
Check Spam Score Before Launch
Use mail-tester.com before launching any production email. Send the email to their test address, then view your spam score. Every point below 9/10 indicates a specific problem to fix: missing DKIM, no unsubscribe link, too many images, spammy subject line. Fix everything before your first real customer receives an email from your app.
Questions Bubble Builders Ask Most About Email
Q: Can I use Bubble’s built-in email for production?
We strongly recommend against it. Bubble’s built-in email has poor deliverability and often lands in spam folders. Use SendGrid, Postmark, or Mailgun for any email a real customer will receive.
Q: How do I personalise emails with user data?
Build your email content in the Bubble workflow before calling the SendGrid API. Construct the subject line and HTML body using dynamic expressions: ‘Hello ‘ + Current User’s first_name + ‘, your trial ends on ‘ + Workspace’s trial_ends_at formatted. Pass these as parameters to your API call.
Q: How do I handle email unsubscribes?
Add an unsubscribe link to every marketing email (required by law for marketing emails; optional for transactional). The link should navigate to a Bubble page that sets email_marketing_opt_in = no on the User record. Always check this field before sending non-transactional emails.
Build Your Bubble.io App With Expert Help
Pakistan’s leading Bubble.io development team. Multi-tenant SaaS architecture, Stripe billing, and full product builds done right from day one.
