Email Testing

Testing email on your own domain

Point a domain you own at InboxDome so test inboxes read like real addresses on your brand. Verify ownership with a TXT record, then route the mail.

On this page
  1. 1. Claim the domain
  2. 2. Publish the TXT record and verify
  3. 3. Routing the mail (this part needs a nameserver change)
  4. 4. Use it
  5. Isolation, and what your domain does not join
  6. When you are done with it

Shared disposable domains are fine for testing your own signup flow. They stop being fine the moment the thing you are testing cares who you are:

  • A B2B product that only accepts a corporate address, not a throwaway one.
  • A staging environment behind an allowlist of company domains.
  • A deliverability check that is only meaningful on the domain you actually send to.
  • A demo where alex@acme-demo.com is the point, and k7f2p9@mail.inboxdome.com is not.

For those, bring your own domain: you own it, we receive on it, and the inboxes look like ordinary addresses on your brand.

1. Claim the domain

curl -X POST https://inboxdome.com/v1/domains \
  -H "Authorization: Bearer $INBOXDOME_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"mail.acme-demo.com"}'

The response tells you exactly what to publish:

{
  "domain": { "domain": "mail.acme-demo.com", "status": "pending", "verified": false },
  "verification": {
    "type": "TXT",
    "name": "_inboxdome.mail.acme-demo.com",
    "value": "inboxdome-verify=3f9c…"
  }
}

Use a subdomain you are willing to dedicate to receiving (mail., test., inbox.), not your apex. The apex is where your real MX records live, and you do not want a test harness anywhere near them.

Only an admin key can manage domains; a member key gets a 403. Ten custom domains per account.

2. Publish the TXT record and verify

Add the TXT record at your DNS provider, then:

curl -X POST https://inboxdome.com/v1/domains/mail.acme-demo.com/verify \
  -H "Authorization: Bearer $INBOXDOME_KEY"

We resolve _inboxdome.<domain> over DNS-over-HTTPS and look for the exact token. If it is not there yet you get a txt_not_found back. That is almost always propagation, not a mistake. Wait and call verify again; it is safe to retry.

Proving ownership this way means nobody can claim a domain they do not control, which is the whole reason the step exists.

3. Routing the mail (this part needs a nameserver change)

Being straight with you about where the automation stops.

Verification is automatic, and so is everything after it. The one step we cannot do for you is repointing the domain: receiving mail requires its DNS to run through our Cloudflare account, so the verify call hands back two nameservers to set at your registrar.

{
  "domain": { "domain": "mail.yourapp.com", "verified": true },
  "nameservers": ["kipp.ns.cloudflare.com", "opal.ns.cloudflare.com"]
}

Once that delegation resolves we enable mail routing and activate the domain by ourselves. We check every 15 minutes, so in practice it is live shortly after your registrar propagates. If you cannot delegate the apex, use a subdomain you can.

Until it is activated the domain sits in pending, and inboxes created on it will not receive. Check where a domain has got to with:

curl https://inboxdome.com/v1/domains/custom \
  -H "Authorization: Bearer $INBOXDOME_KEY"

We would rather tell you that up front than have you discover it while debugging a test that was never going to pass. It is the next thing we are automating.

4. Use it

Once the domain is active, name it when you create an inbox:

const inbox = await client.createInbox({
  domain: 'mail.acme-demo.com',
  localPart: 'alex',
});
// alex@mail.acme-demo.com

Everything else is unchanged: waitForOtp, assertEmail, webhooks all behave exactly as they do on a shared domain.

Isolation, and what your domain does not join

A custom domain belongs to your account. It never enters the pool the public site picks from, so a stranger on inboxdome.com cannot land on your brand’s domain, and nobody outside your account can create an inbox on it or read one.

When you are done with it

Deleting the domain from InboxDome stops us receiving for it. Also remove the mail routing from your DNS. A domain still pointing MX at a service that is no longer expecting it is a quiet way to lose mail. The verification TXT record can go at the same time.

See also: WordPress and WooCommerce · API reference · Testing email webhooks

Disclosure: InboxDome publishes this blog and makes the products it mentions. We describe what they do rather than promise results.

InboxDome TeamEmail infrastructure builders

The InboxDome team runs the temporary-email service and email-testing API this blog belongs to. We write about disposable inboxes, email privacy and testing transactional email, based on operating the infrastructure ourselves.