Custom domains
Mint aliases on your own domain. Verify a TXT record, point an MX, done.
By default your aliases live at *@emailforward.xyz. If you'd rather hand out [email protected], you can point your own domain at us and we'll route it through the same pipeline — forwards, Telegram, history, reply-through, API access, all identical.
Custom domains are free. No per-domain fee, no tier gating, no limits per domain.
Before you start
You need:
- A domain you control with editable DNS (TXT + MX records).
- A signed-in session at /manage-email (ask for a link with the inbox that will manage the domain).
1. Add the domain
Open /manage-email, switch to the Domains tab, and click Add. Enter the domain (e.g. mail.yourdomain.com). We store it as pending and show you a TXT record to publish.
2. Publish the TXT record
We give you two values:
- Name. Usually something like
_emailforward.yourdomain.com. - Value.
emailforward-verify=<random token>.
Add that as a TXT record in your DNS control panel. On most providers it looks like:
| Type | Name | Value | TTL |
|---|---|---|---|
| TXT | _emailforward | emailforward-verify=<token> | 300 |
Leave TTL short during setup — you can raise it after verification.
3. Point the MX record
For the domain itself (not the _emailforward. sub-record), publish an MX record:
| Type | Name | Value | Priority |
|---|---|---|---|
| MX | @ | mail.emailforward.xyz. | 10 |
This is what actually delivers mail to us. Without it, SMTP senders won't know where to go.
4. Verify
Back on the Domains tab, click Verify next to your domain. We do a live DNS lookup of the TXT record. DNS propagation can take a few minutes — if it fails, wait a bit and try again. Once verified, the domain row shows a green verified badge.
5. Mint aliases on your domain
Switch to the Aliases tab. The Domain dropdown now includes your verified domains alongside @emailforward.xyz. Pick yours, optionally type a prefix, and click Create. The alias lives at [email protected] and forwards to the inbox that owns the session.
You can also create via the API — pass "domain": "yourdomain.com" to POST /api/v1/aliases. See /docs/api for the full reference.
What works, what doesn't
Works on custom domains:
- All email forwarding features (multi-recipient, Telegram delivery, history, pause, delete).
- Tracker stripping.
- Recipient verification.
- API access.
Limitations today:
- Two-way reply needs a sender signature we don't configure for third-party domains yet. Replies on custom-domain aliases are best-effort and may not deliver. Aliases at
@emailforward.xyzare unaffected. - Catch-all on your domain isn't exposed in the UI yet — every alias is explicit.
Removing a domain
From the Domains tab, click the trash icon. We only allow removal once zero aliases are still using the domain — delete those first, or the request is rejected.
Troubleshooting
- Verify says "TXT record not found". Your DNS change hasn't propagated. Try
dig TXT _emailforward.yourdomain.comfrom a terminal; if the record isn't there yet, wait. If it's there but we still fail, double-check the exact value has no quotes stripped or whitespace. - Mail bounces with "relay access denied". MX is probably missing, pointing wrong, or TTL hasn't expired on a stale record. Check with
dig MX yourdomain.com. - I published the TXT before adding the domain here. That's fine — just use the same value we generate. You may need to replace it.