Enable reply-by-email in your SaaS application

Let users respond to notifications directly from their inbox — no portal login required.

The Problem

  • Users abandon your app when forced to log in just to reply to a notification
  • Building email parsing infrastructure from scratch takes weeks of engineering time
  • Threading conversations reliably across email clients is surprisingly complex
  • Handling attachments, inline images, and signatures requires edge-case handling
  • Your support team wastes time manually copying email replies into your system

Why Existing Solutions Fall Short

IMAP polling is slow, unreliable, and requires managing persistent connections

Regex parsing of email content breaks constantly with different email clients

Forwarding rules lose metadata and make threading impossible

Running your own mail server means managing spam filters, deliverability, and compliance

You shouldn't have to build this yourself.

How Mailhooks Solves This

Instant Webhook Delivery

Receive structured JSON the moment an email arrives. No polling, no delays.

Thread Identification

Automatic parsing of In-Reply-To and References headers to match replies to threads.

Clean Content Extraction

Get the reply body without quoted text, signatures, or email client cruft.

Attachment Handling

Attachments are extracted, stored, and delivered as downloadable URLs.

How It Works

1

User receives notification

Your app sends an email notification with a unique reply address.

2

User hits reply

They respond directly from Gmail, Outlook, or any email client.

3

Mailhooks receives it

The reply is parsed and structured into JSON automatically.

4

Webhook fires

Your endpoint receives the reply with thread context.

5

App updates

The reply appears in your app instantly, threaded correctly.

Code Example

Mailhooks sends a structured webhook payload when a reply arrives.

Webhook Payload

{
  "id": "msg_abc123",
  "from": "[email protected]",
  "to": "[email protected]",
  "subject": "Re: Your support request",
  "text": "Thanks, that fixed the issue!",
  "html": "

Thanks, that fixed the issue!

", "headers": { "in-reply-to": "", "references": "" }, "attachments": [] }

Handler Code

// Express webhook handler
app.post('/webhooks/email-reply', (req, res) => {
  const { from, to, text, headers } = req.body;

  // Extract ticket ID from the reply address
  const ticketId = to.match(/reply\+ticket-(\d+)@/)?.[1];

  if (ticketId) {
    // Add the reply to the ticket thread
    await addReplyToTicket(ticketId, {
      from,
      content: text,
      inReplyTo: headers['in-reply-to']
    });
  }

  res.status(200).send('OK');
});

Frequently Asked Questions

Every inbox can be configured with sender filtering rules. You can whitelist specific domains or email addresses, or use our webhook to implement your own spam filtering logic. Emails that don't match your rules are automatically rejected.

Webhooks are typically delivered within 100-500ms of email receipt. We process emails in real-time with no polling delays. For high-availability applications, we also offer webhook retries with exponential backoff.

Mailhooks is built specifically for inbound email. We offer simpler setup (no DNS changes required for testing), better attachment handling with direct download URLs, and a developer-first API for fetching emails programmatically—perfect for E2E testing.

Yes! You can connect your own domain with simple DNS configuration. We also provide free subdomains on inbox.mailhooks.dev for testing and development.

We automatically retry failed webhooks with exponential backoff for up to 24 hours. You can also use our API to fetch any missed emails. All emails are stored and accessible via the dashboard.

Get Started in 3 Steps

Takes ~2 minutes — no email infrastructure required.

1

Create a Mailhooks account

Sign up for free in seconds.

2

Create an inbox

Get a unique email address for your use case.

3

Add your webhook URL

Point to your endpoint and start receiving emails.

Add reply-by-email to your app in minutes