Inbound Domain Forwarding

Use your own email addresses to receive inbound emails with MX record forwarding.

Overview

By default, each inbound stream gets a unique email address like c57f298522914941961c322877cd36ff@inbound.usetransactional.com. While this works great for testing, you may want to receive emails at your own domain addresses like support@yourdomain.com.

This guide covers different ways to route emails from your domain to Transactional.

Choose Your Setup Method

ScenarioRecommended Method
Dedicated domain for inbound (no existing email)Full MX Forwarding
Keep Gmail/Outlook for team, forward specific addressesGmail Workspace Routing
Keep existing email, use subdomain for inboundSubdomain Approach

Full MX Forwarding

Use this method when you want all emails to a domain routed to Transactional.

How It Works

  1. Email Sent — Someone sends an email to support@yourdomain.com
  2. DNS Lookup — The sender's mail server looks up MX records for yourdomain.com
  3. Routing — MX record points to inbound.usetransactional.com
  4. Reception — Transactional's SMTP server receives the email
  5. Delivery — Parsed email data is sent to your webhook

Setup Steps

Step 1: Add Your Domain

  1. Go to your inbound stream's Settings tab
  2. Under Inbound Domains, click Add Domain
  3. Enter your domain (e.g., yourdomain.com)

Step 2: Configure MX Records

Add this MX record to your domain's DNS:

TypeHostValuePriority
MX@inbound.usetransactional.com10

Step 3: Verify & Test

  1. Click Verify in your stream settings
  2. Send a test email to any address at your domain
  3. Check your webhook for the parsed email data

Gmail Workspace Integration

Use this method to forward specific addresses to Transactional while keeping your team's email on Gmail Workspace.

Example: support@glood.email → Transactional, while john@glood.email stays on Gmail.

This is the cleanest approach for forwarding specific addresses.

Setup in Google Admin Console:

  1. Go to Apps → Google Workspace → Gmail → Routing
  2. Scroll to Routing section and click Configure (or Add another rule)
  3. Configure the rule:
SettingValue
NameForward support to Transactional
Email messages to affectInbound
Envelope filterOnly affect specific envelope recipients
Envelope recipientsupport@yourdomain.com
  1. Under For the above types of messages, do the following:

    • Select Change route
    • Choose Add more recipients
    • Add your Transactional inbound address: abc123@inbound.usetransactional.com
  2. Optional: Check Also deliver to original destination if you want a copy in Gmail

  3. Click Save

Result:

  • support@yourdomain.com → Forwarded to Transactional
  • john@yourdomain.com → Stays in Gmail (unchanged)
  • sales@yourdomain.com → Stays in Gmail (unchanged)

Option B: Google Group Forwarding

Use this for simpler setups or if you don't have Admin Console access.

  1. Create a Google Group: support@yourdomain.com
  2. Go to Group Settings → Email options
  3. Add your Transactional inbound address as a member
  4. Set Who can post to allow external senders

Option C: Gmail Filter + Auto-Forward

For individual Gmail accounts (not Workspace):

  1. Go to Gmail → Settings → Forwarding
  2. Add your Transactional inbound address as forwarding destination
  3. Create a filter: to:support@yourdomain.com
  4. Set action: Forward to your Transactional address

Subdomain Approach

Use a subdomain for Transactional while keeping your main domain on existing email.

Setup

AddressHandled By
john@yourdomain.comGmail/Outlook (existing)
support@inbound.yourdomain.comTransactional

DNS Configuration:

yourdomain.com          MX → Your existing provider (Gmail, etc.)
inbound.yourdomain.com  MX → inbound.usetransactional.com

Add MX record for subdomain:

TypeHostValuePriority
MXinboundinbound.usetransactional.com10

Then add inbound.yourdomain.com as an inbound domain in your stream settings.


Wildcard vs Specific Addresses

Wildcard Routing (Default)

When you add a domain, all emails to that domain route to your stream:

  • support@yourdomain.com → Your stream
  • sales@yourdomain.com → Your stream
  • anything@yourdomain.com → Your stream

Specific Address Routing

Route different addresses to different streams:

  1. Create multiple inbound streams
  2. Set specific inbound addresses on each:
    • Stream A: support@yourdomain.com
    • Stream B: sales@yourdomain.com

Priority order:

  1. Specific inbound address matches (highest priority)
  2. Wildcard domain matches (*@yourdomain.com)
  3. Default stream routing

Security Considerations

SPF Records

MX records (receiving) and SPF records (sending) are independent. Your existing SPF configuration won't conflict with inbound forwarding.

DMARC Alignment

Inbound emails are processed regardless of sender's DMARC policy. Authentication results (SPF, DKIM, DMARC) are included in your webhook payload for you to implement your own policies.

Spam Filtering

All inbound emails pass through:

  • rspamd spam scoring
  • ClamAV malware scanning
  • Configurable spam threshold per stream

Troubleshooting

Emails Not Arriving

  1. Check MX records: Run dig MX yourdomain.com to verify
  2. Verify domain status: Ensure domain shows as verified in Settings
  3. Check spam threshold: Lower the threshold if legitimate emails are blocked
  4. Review inbound rules: Check ALLOW/BLOCK rules aren't filtering

Gmail Forwarding Not Working

  1. Check routing rule order: Rules are processed top-to-bottom
  2. Verify envelope recipient: Use exact email address match
  3. Check spam folder: Gmail may mark forwarded emails as spam
  4. Confirm Transactional address: Ensure the inbound address is correct

Domain Verification Failing

  1. DNS propagation: Wait up to 48 hours for DNS changes
  2. Correct value: Ensure MX points to inbound.usetransactional.com
  3. Priority: Include priority value (e.g., 10)

API Reference

Add Inbound Domain

await client.streams.addInboundDomain({
  streamId: 'str_123',
  domain: 'yourdomain.com',
});

Verify Domain

await client.streams.verifyInboundDomain({
  streamId: 'str_123',
  domainId: 'dom_456',
});

List Inbound Domains

const domains = await client.streams.listInboundDomains({
  streamId: 'str_123',
});

Next Steps