# Custom receiving domains

> Receive inbound email on your own domain by adding an MX record and subscribing a webhook to email.received.

Besides [MailBlastr-managed domains](https://www.mailblastr.com/docs/receiving/introduction), you can receive email on your own custom domain such as `yourdomain.tld`. Receiving on a custom domain takes one extra DNS record — an `MX` record — on top of the verification you already do for sending.

## 1. Add the MX record

First, [verify your domain](https://www.mailblastr.com/docs/domains/managing) for sending if you have not already. Receiving then requires an additional `MX` record so mail for the domain is routed to MailBlastr:

1. **Open Domains** — Go to the Domains page in the dashboard and open the domain you want to receive on.
2. **Copy the MX record** — In the receiving section, copy the `MX` record MailBlastr shows you (host and priority).
3. **Add it at your DNS provider** — Paste the `MX` record into your DNS provider and save.

> **Warning:** You will **not** receive mail at MailBlastr unless the required `MX` record is the **lowest-priority** record for the domain (lower priority *value* = higher precedence). If you already use the domain for a real inbox, add the receiving `MX` record to a subdomain (e.g. `subdomain.yourdomain.tld`) instead so it does not interfere with your existing email service. Alternatively, keep your existing email service and set up a forwarding rule there that forwards to an address configured in MailBlastr, or forwards directly to the SMTP server hostname shown in MailBlastr's receiving `MX` record.

## 2. Configure a webhook

Create a webhook endpoint subscribed to the `email.received` event, exactly as for a managed domain:

1. **Open Webhooks** — Go to the Webhooks page in the dashboard.
2. **Add a webhook** — Click "Add Webhook" and enter your endpoint URL.
3. **Subscribe to email.received** — Select the `email.received` event type and save.

## 3. Receive email events

Create a route that accepts `POST` requests and handles the `email.received` event:

**Node.js**

```js
// app/api/events/route.ts
import type { NextRequest } from 'next/server';
import { NextResponse } from 'next/server';

export const POST = async (request: NextRequest) => {
  const event = await request.json();

  if (event.type === 'email.received') {
    return NextResponse.json(event);
  }

  return NextResponse.json({});
};
```

**Python**

```python
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.post("/api/events")
def events():
    event = request.get_json()
    if event.get("type") == "email.received":
        return jsonify(event)
    return jsonify({})
```

After receiving the event you can fetch the message body and attachments. We recommend [verifying the webhook signature](https://www.mailblastr.com/docs/webhooks/verify) to secure your endpoint. The `email.received` payload shape is identical to a managed domain:

```json
{
  "type": "email.received",
  "created_at": "2026-02-22T23:41:12.126Z",
  "data": {
    "email_id": "56761188-7520-42d8-8898-ff6fc54ce618",
    "created_at": "2026-02-22T23:41:11.894719+00:00",
    "from": "onboarding@mailblastr.dev",
    "to": ["delivered@mailblastr.dev"],
    "bcc": [],
    "cc": [],
    "received_for": ["forwarded@example.com"],
    "message_id": "<111-222-333@email.example.com>",
    "subject": "Sending this example",
    "attachments": [
      {
        "id": "2a0c9ce0-3112-4728-976e-47ddcd16a318",
        "filename": "avatar.png",
        "content_type": "image/png",
        "content_disposition": "inline",
        "content_id": "img001"
      }
    ]
  }
}
```

## Enabling receiving for an existing domain

If you already have a verified domain, enable receiving with the toggle in the receiving section of the domain detail page. A modal then shows the `MX` record to add at your DNS provider. After you add it, click "I've added the record" and wait for the receiving record to show as **verified**.

> **Note:** You do **not** need to re-verify a domain you already verified for sending. Enabling receiving only verifies the **new** `MX` record — the rest of your domain configuration stays as-is.

## FAQ

### What if I already have MX records for my domain?

Mail is delivered only to the `MX` record with the **lowest priority** value. Adding MailBlastr's `MX` record to a root domain that already has `MX` records will either receive nothing (if the existing record is lower priority) or hijack your existing email (if MailBlastr's is lower priority); equal priorities make delivery unpredictable. The safe choice is a dedicated subdomain such as `subdomain.yourdomain.tld`. Alternatively, keep using the same domain for both: set up a forwarding rule in your existing email service that forwards to an address configured in MailBlastr, or forwards directly to the SMTP server hostname that appears in the receiving `MX` record.

### Do I need to verify the domain again for receiving?

No. A domain already verified for sending only needs receiving enabled and the new `MX` record added — MailBlastr verifies that one record.
