# How to manage email requests in Bubble

- Tool: Bubble
- Difficulty: Beginner
- Time required: 20-25 min
- Compatibility: All Bubble plans
- Last updated: March 2026

## TL;DR

Sending emails from Bubble uses the built-in Send Email action for basic needs and external services like SendGrid for production-grade delivery. This tutorial covers configuring email sending, building templates with dynamic content, setting up SendGrid for reliable delivery, and monitoring bounce rates to maintain sender reputation.

## Overview: Managing Email in Bubble

Email is critical for user notifications, transactional receipts, and marketing communications. This tutorial covers Bubble's email sending capabilities from the basic Send Email action through production-grade SendGrid integration, including template design, dynamic personalization, and delivery monitoring.

## Before you start

- A Bubble account with an app
- A SendGrid account (free tier available for up to 100 emails/day)
- Understanding of Bubble workflows
- DNS access for email authentication (SPF/DKIM)

## Step-by-step guide

### 1. Use Bubble's built-in Send Email action

In any workflow, add the 'Send Email' action (found under Email in the action list). Configure: To (recipient email — dynamic expression like Current User's email), Subject (text with optional dynamic inserts), Body (HTML or plain text with dynamic data), and optionally CC/BCC. The body supports HTML for formatting. Insert dynamic data using Bubble's expression builder: click 'Insert dynamic data' and select fields like Current User's first_name or the result of a previous workflow step. This uses Bubble's built-in email service (Postmark) which works for basic needs.

> Pro tip: Bubble's built-in email has limited daily volume and basic deliverability. For production apps sending more than 20-30 emails/day, use SendGrid.

**Expected result:** A workflow that sends formatted emails with dynamic content using Bubble's built-in email service.

### 2. Set up SendGrid for production email delivery

Create a SendGrid account at sendgrid.com (free tier: 100 emails/day). In SendGrid, go to Settings → API Keys and create an API key with Mail Send permissions. In your Bubble app, go to Settings → Email. Enter your SendGrid API key in the SendGrid field. Configure your sending domain: in SendGrid, go to Settings → Sender Authentication → Authenticate Your Domain. Add the required DNS records (CNAME entries for DKIM and SPF) at your domain registrar. Verify the domain in SendGrid. Your emails now send through SendGrid with proper authentication.

**Expected result:** SendGrid is configured with authenticated domain, sending emails with proper SPF/DKIM for high deliverability.

### 3. Build dynamic email templates

For consistent branding, create email templates using HTML. Build a template with your logo, brand colors, and layout. Store the template HTML in an Option Set attribute or a Data Type field. In your Send Email action, use the template HTML as the body and insert dynamic data using Bubble expressions. For example: replace {{first_name}} in your template with the recipient's actual first_name using Bubble's Find & Replace text operator. Alternatively, use SendGrid's Dynamic Template feature: create templates in SendGrid's dashboard and call them via the API Connector with dynamic variables.

**Expected result:** Professional branded email templates with dynamically inserted recipient-specific content.

### 4. Implement email workflows for common scenarios

Set up automated email workflows for: Welcome email (trigger: when User is signed up), Order confirmation (trigger: when Order status changes to confirmed), Password reset (built into Bubble's auth system), Reminder emails (scheduled backend workflow), and Weekly digest (scheduled backend workflow running every 7 days). For each workflow, use the Send Email action with the appropriate template and dynamic data. For bulk emails (newsletters), use a recursive backend workflow that sends one email at a time with a pause between sends to avoid rate limits.

**Expected result:** Automated email workflows for welcome, transactional, and scheduled notification emails.

### 5. Monitor delivery and manage bounces

In SendGrid's dashboard, monitor key metrics: Delivery Rate (target: 95%+), Open Rate, Bounce Rate, and Spam Reports. Set up SendGrid webhook notifications in the API Connector to receive delivery status callbacks. Create an Email_Log Data Type with fields: recipient, subject, status (sent/delivered/bounced/opened), and timestamp. When SendGrid sends a webhook for a bounce, update the Email_Log and mark the user's email as invalid in your database. Suppress future emails to bounced addresses to maintain your sender reputation.

**Expected result:** Email delivery monitoring with bounce handling to maintain high deliverability rates.

## Complete code example

File: `Workflow summary`

```text
EMAIL MANAGEMENT SUMMARY
=========================

SETUP:
  Basic: Bubble built-in (Postmark)
    Settings → no additional config needed
    Limit: ~20-30 emails/day recommended

  Production: SendGrid
    Settings → Email → SendGrid API key
    SendGrid: Authenticate domain (DNS: CNAME records)
    Free tier: 100 emails/day

EMAIL WORKFLOWS:
  Welcome Email:
    Trigger: User signs up
    Send Email: template_welcome + user.first_name

  Order Confirmation:
    Trigger: Order status = 'confirmed'
    Send Email: template_order + order details

  Reminder:
    Backend workflow scheduled for reminder_date - 24h
    Send Email: template_reminder + event details

  Newsletter (bulk):
    Recursive backend workflow:
    Process one user → Send Email → Schedule next
    Pause: 1 second between sends

TEMPLATE PATTERN:
  Store HTML template in Option Set or Data Type
  Dynamic insertion using Find & Replace:
    Template: 'Hello {{name}}, your order #{{order_id}}...'
    Body: template:find & replace('{{name}}', user.name)
         :find & replace('{{order_id}}', order.number)

MONITORING:
  SendGrid Dashboard: delivery, open, bounce rates
  Email_Log Data Type: recipient, subject, status, timestamp
  Bounce handling: mark user email as invalid, suppress
  Target: 95%+ delivery rate, <2% bounce rate
```

## Common mistakes

- **Sending bulk emails in a loop without pacing** — Sending hundreds of emails simultaneously can trigger rate limits and get your sending domain flagged as spam Fix: Use a recursive backend workflow with a 1-second pause between each email send for bulk operations
- **Not authenticating your sending domain with SPF/DKIM** — Unauthenticated emails are much more likely to land in spam folders, reducing deliverability Fix: Set up domain authentication in SendGrid by adding the required DNS records and verifying your domain
- **Continuing to send to bounced email addresses** — Repeatedly sending to invalid addresses damages your sender reputation and can get your domain blacklisted Fix: Track bounces via SendGrid webhooks and suppress future emails to addresses that have bounced

## Best practices

- Use SendGrid for production apps sending more than 20-30 emails per day
- Authenticate your domain with SPF and DKIM for maximum deliverability
- Use branded email templates with consistent design
- Pace bulk email sends with a 1-second delay between each message
- Monitor bounce rates and suppress invalid email addresses
- Include an unsubscribe link in marketing emails for CAN-SPAM compliance

## Frequently asked questions

### How many emails can I send from Bubble for free?

Bubble's built-in email service handles basic volumes. For higher volumes, SendGrid's free tier allows 100 emails per day. Paid SendGrid plans start at $19.95/month for 50,000 emails.

### Why are my emails going to spam?

Common causes: unauthenticated sending domain (no SPF/DKIM), generic content, too many links, or sending to invalid addresses. Authenticate your domain in SendGrid and clean your email list.

### Can I send HTML emails from Bubble?

Yes. The Send Email action's body field accepts HTML. Build your template with HTML tags for formatting, images, and layout. Test across email clients as rendering varies.

### How do I add an unsubscribe link?

Add an unsubscribe field (yes/no) to your User Data Type. Include a link in every email that navigates to a page setting that field to yes. Filter out unsubscribed users from all email workflows.

### Can I track email opens?

SendGrid tracks opens automatically using a tracking pixel. View open rates in SendGrid's dashboard. You can also receive open events via webhook to log them in your Bubble database.

### Can RapidDev help set up email infrastructure?

Yes. RapidDev can configure SendGrid integration, design branded email templates, build automated email workflows, and set up delivery monitoring for your Bubble app.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/manage-email-requests-in-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/manage-email-requests-in-bubble
